1、单表自我关联查询
同一个数据表,同一个 num 有连续三条纪录,分别用 type 表示不同用途,用 flag 记录该用途完成情况 ,表结构如下:
编写一个SQL查询,查找每个 num 中 type in (0,1) 的 flag 不全为 1 但 type = 2 为 1 的记录,只需要输出 type = 2 的记录即可。
SELECT c.*
FROM test a
JOIN test b
ON a.id+1 = b.id
JOIN test c
ON a.id+2 = c.id
WHERE !(a.flag = 1 && b.flag = 1)
AND c.flag = 1
AND c.type = 2
查询结果:
如果需要输出同个 num 所有 type 的记录。
SELECT *
FROM test
WHERE num in(
SELECT c.num
FROM test a
JOIN test b
ON a.id+1 = b.id
JOIN test c
ON a.id+2 = c.id
WHERE !(a.flag = 1 && b.flag = 1)
AND c.flag = 1
AND c.type = 2
)
查询结果:
2、查询一个表有的而另一个表没有的名单
思路:表a左外联表b,条件:表b.name is null,其他条件相同