记录一些SQL需求(涉及单表自我关联)

1、单表自我关联查询

同一个数据表,同一个 num 有连续三条纪录,分别用 type 表示不同用途,用 flag 记录该用途完成情况 ,表结构如下:


表结构.png

编写一个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

查询结果:


结果1.png

如果需要输出同个 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.png

2、查询一个表有的而另一个表没有的名单

思路:表a左外联表b,条件:表b.name is null,其他条件相同

你可能感兴趣的:(记录一些SQL需求(涉及单表自我关联))