我试图找到表1列A中的值不在表2列A中的行
这是查询...
SELECT contactsid
FROM contacts
WHERE (email1 NOT IN (SELECT email
FROM old_contact))
它返回0行,我知道这是不正确的。 contacts.email1
中有许多行不在old_contact.email
我该如何撰写此查询?
答案 0 :(得分:7)
我的猜测是old_contract.email
取NULL
个值。
出于这个原因,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
这将使用Contacts
将old_contact
加入LEFT JOIN
- 一种基于连接条件的连接类型,从左侧返回所有记录(即{{1}即使右侧没有记录也是如此。然后,Contacts
子句过滤结果,使其仅返回 来自左侧记录不存在的左侧记录。