选择Except Select with extra column

时间:2018-01-18 16:55:04

标签: sql sql-server

假设我有一个SQL查询:

SELECT FirstName,LastName FROM Persons1
EXCEPT
SELECT FirstName,LastName FROM Persons2

如果表具有相同的结构,它将起作用。但是现在我还希望在我的表中有一个额外的列 - 第一个表中出现但第二个表中没有的人的身份

SELECT PersonId,FirstName,LastName FROM Persons1
EXCEPT
SELECT FirstName,LastName FROM Persons2

当然不会工作。

最好的方法是什么?我的真实案例有更多列,有些值可能为空。

2 个答案:

答案 0 :(得分:2)

您可以改为使用NOT EXISTS

SELECT 
    p1.PersonId, p1.FirstName, p1.LastName
FROM Persons1 p1
WHERE NOT EXISTS(
    SELECT 1
    FROM Persons2 p2
    WHERE
        p2.FirstName = p1.FirstName
        AND p2.LastName = p2.LastName
);

这将为Persons1中的FirstNameLastName Persons2上的{{1}}行提供行。

答案 1 :(得分:0)

这是一个选项:

SELECT P.PersonID
    ,E.FirstName
    ,E.LastName
FROM (
    SELECT FirstName,LastName FROM Persons1
    EXCEPT
    SELECT FirstName,LastName FROM Persons2
) E
INNER JOIN Person1 P
    ON P.FirstName = E.FirstName
    AND P.LastName = E.LastName