tsql的问题不在查询中

tin*_*han 2 sql t-sql sql-server

我正在尝试查找表1列A中的值不在表2列A中的行

这是查询......

SELECT contactsid
FROM contacts
WHERE (email1 NOT IN (SELECT email
                      FROM old_contact))
Run Code Online (Sandbox Code Playgroud)

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

我该怎么写这个查询?

Gor*_*off 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
                 ) ;
Run Code Online (Sandbox Code Playgroud)

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