tsql的问题不在查询中

时间:2014-05-28 17:02:34

标签: sql sql-server tsql

我试图找到表1列A中的值不在表2列A中的行

这是查询...

SELECT contactsid
FROM contacts
WHERE (email1 NOT IN (SELECT email
                      FROM old_contact))

它返回0行,我知道这是不正确的。 contacts.email1中有许多行不在old_contact.email

我该如何撰写此查询?

2 个答案:

答案 0 :(得分:7)

我的猜测是old_contract.emailNULL个值。

出于这个原因,not exists通常是更好的选择:

SELECT contactsid
FROM contacts c
WHERE NOT EXISTS (SELECT 1
                  FROM old_contract oc
                  WHERE c.email = oc.email1
                 ) ;

您还可以将where email1 is not null添加到子查询中。但是,我发现仅使用not exists通常会更安全,以防我忘记这种情况。

答案 1 :(得分:2)

尝试:

SELECT contactsid
FROM Contacts a
LEFT JOIN old_contact b
ON a.email1 = b.email
WHERE b.email IS NULL

这将使用Contactsold_contact加入LEFT JOIN - 一种基于连接条件的连接类型,从左侧返回所有记录(即{{1}即使右侧没有记录也是如此。然后,Contacts子句过滤结果,使其仅返回 来自左侧记录不存在的左侧记录。