Sql 查询以标识没有特定值的记录
我有一个类似以下内容的数据表:Sql 查询以标识没有特定值的记录,sql,db2,Sql,Db2,我有一个类似以下内容的数据表: ID Num | Code ------------- 1 | A 1 | B 1 | C 1 | D 2 | A 2 | B 3 | A 3 | B 3 | D 4 | B 5 | A 5 | B 5 | E SELECT DISTINCT f1.ID_Num FROM yourt
ID Num | Code
-------------
1 | A
1 | B
1 | C
1 | D
2 | A
2 | B
3 | A
3 | B
3 | D
4 | B
5 | A
5 | B
5 | E
SELECT DISTINCT f1.ID_Num
FROM yourtable f1
LEFT OUTER JOIN LATERAL
(
SELECT f2.ID_Num FROM yourtable f2
WHERE f2.code in ('C', 'D') AND f2.ID_Num=f1.ID_Num
FETCH FIRST ROWS ONLY
) f3 on 1=1
WHERE f3.ID_Num is null
我需要能够编写一个SQL查询来显示所有没有代码C或D的ID号。(在本例中,ID号为2、4和5。)
提前感谢您提供的任何帮助 我不会用在:
SELECT DISTINCT ID_Num
FROM t
WHERE ID_Num NOT IN
(SELECT ID_Num
FROM t
WHERE code = 'C'
OR code = 'D')
我喜欢使用
group by
和having
来处理这类问题:
select id_num
from t
group by id_num
having sum(case when code in ('C', 'D') then 1 else 0 end) = 0;
您可以使用“not exists”(通常比not in更有效)
您可以使用“左外侧连接横向”并按如下方式选择未建立的行:
ID Num | Code
-------------
1 | A
1 | B
1 | C
1 | D
2 | A
2 | B
3 | A
3 | B
3 | D
4 | B
5 | A
5 | B
5 | E
SELECT DISTINCT f1.ID_Num
FROM yourtable f1
LEFT OUTER JOIN LATERAL
(
SELECT f2.ID_Num FROM yourtable f2
WHERE f2.code in ('C', 'D') AND f2.ID_Num=f1.ID_Num
FETCH FIRST ROWS ONLY
) f3 on 1=1
WHERE f3.ID_Num is null
我很抱歉。它是DB2。