假设我有一个SQL查询:
SELECT FirstName,LastName FROM Persons1
EXCEPT
SELECT FirstName,LastName FROM Persons2
如果表具有相同的结构,它将起作用。但是现在我还希望在我的表中有一个额外的列 - 第一个表中出现但第二个表中没有的人的身份
SELECT PersonId,FirstName,LastName FROM Persons1
EXCEPT
SELECT FirstName,LastName FROM Persons2
当然不会工作。
最好的方法是什么?我的真实案例有更多列,有些值可能为空。
答案 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
中的FirstName
和LastName
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