MySQL 5.7同表左外连接:如何筛选符合特定flag规则的数据
使用同表左外连接实现需求的MySQL查询语句
嘿,这需求用同表左外连接就能完美实现,我来给你一步步说明怎么写:
首先明确核心思路:我们需要把mytable和它自己做左外连接,一边找所有flag=0的行,另一边匹配相同title且flag=1的行,最后只保留那些没有匹配到对应flag=1行的flag=0记录。
对应的SQL语句如下:
SELECT t1.title, t1.flag FROM mytable t1 LEFT JOIN mytable t2 ON t1.title = t2.title AND t2.flag = 1 WHERE t1.flag = 0 AND t2.title IS NULL;
语句拆解说明:
- 给表起两个别名
t1和t2,相当于把同一张表当成两张独立的数据集来操作 t1作为主数据集,先通过WHERE t1.flag = 0筛选出所有flag为0的行- 左连接
t2的条件设置为t1.title = t2.title AND t2.flag = 1,目的是找到每个title对应的flag=1的记录 - 最后
AND t2.title IS NULL是关键:左连接中如果t2没有匹配到数据,所有t2的字段都会是NULL,这就意味着这个title不存在flag=1的行,正是我们需要保留的目标记录
执行这条语句后,就能得到你期望的结果:
| title | flag |
|---|---|
| second | 0 |
内容的提问来源于stack exchange,提问作者Mortinger
相关产品推荐
相关产品推荐

