mysql的UNION ALL语法以及EXISTS

表结构如下:
在这里插入图片描述
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。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值