表结构如下:
parent_id是上一级的id
如:配件是手机的下一级,电池也是手机的下一级,iPhone 11是iphone的下一级,电子设备没有下一级
实现查询出没有下一级的,以及把有下一级的下一级查出来
查询语句如下:
SELECT *
FROM `cms_category` WHERE `parent_id` != 0 UNION ALL
SELECT *
FROM `cms_category` as a WHERE `parent_id` = 0
AND NOT exists(SELECT * FROM `cms_category` WHERE a.`category_id` = `parent_id`);
结果如图:
mysql语法解析
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
UNION 语法
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
**注释:**默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
UNION ALL 语法
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
EXISTS 运算符用于判断查询子句是否有记录,如果有一条或多条记录存在返回 True,否则返回 False。