我有一张表A,与表B中的记录有1 *关系(即B中可以有多条记录对应A中的单个记录。)
B中的每条记录都有一个值列X.
我想从A中找到一条记录,该记录在特定值的B中没有相应的记录,Y。
例如,我在A中有三条记录(在左侧表示为数字1,2和3)。每个都有B中的记录,其值由逗号分隔列表表示(每个分隔值是B中的记录)。
1 a,b
2 a,c
3 b,c
如果我想获得所有不具有'a'值的记录(即我想要记录3),我该怎么做?
答案 0 :(得分:2)
您可以使用WHERE NOT EXISTS
:
SELECT *
FROM A
WHERE NOT EXISTS (SELECT * FROM B WHERE X = 'a' AND A.ID = B.ID)
或LEFT JOIN
和WHERE ... IS NULL
:
SELECT A.*
FROM A
LEFT JOIN B ON B.ID = A.ID AND B.X = 'a'
WHERE B.ID IS NULL
B.X = 'a'
是JOIN
条件的一部分,因此只有来自B的行X = 'a'
将匹配,如果不存在此行(即IS NULL
),我们想要来自A的那些行。