如何在另一个表中返回没有特定关联记录的记录?

时间:2013-05-29 15:41:02

标签: sql-server sql-server-2012

我有一张表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),我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用WHERE NOT EXISTS

来完成此操作
SELECT *
FROM A
WHERE NOT EXISTS (SELECT * FROM B WHERE X = 'a' AND A.ID = B.ID)

LEFT JOINWHERE ... 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的那些行。