查找基于多列的一个表中存在但不存在另一个表的记录

时间:2015-05-21 18:18:02

标签: sql sql-server select

我有两张桌子,结算和每周一次 我需要找到计费表中但不在每周表中的值,但我需要将其基于多个列。
我有一个只适用于一列的查询:

SELECT * from billing
outer apply
(select * from weekly where billing.[email]= weekly.[email])a
where a.[email] is null

有时在我的数据中,电子邮件可能会发生变化 所以我需要添加一些东西,如果电子邮件不匹配,检查名字和姓氏,但不知道如何做到这一点。

2 个答案:

答案 0 :(得分:2)

您可以使用exists运算符:

SELECT * 
FROM   billing
WHERE  NOT EXISTS
       (SELECT * 
        FROM   weekly 
        WHERE  billing.[email] = weekly.[email] OR
               (billing.[firstName] = weekly.[firstName] AND
                billing.[lastName] = weekly.[lastName]
               )
       )

答案 1 :(得分:0)

您可以使用NOT EXISTS运算符根据电子邮件或名字和姓氏排除每周匹配的记录。

SELECT bl.*
        FROM billing bl
        WHERE NOT EXISTS (
                SELECT 1
                FROM weekly wk
                WHERE (bl.[email] = wk.[email]
                    OR (
                        bl.firstName = wk.firstName
                        AND bl.lastName = wk.lastName))
                    AND bl.lenderName <> wk.lenderName --added this check
                )