使用 EXCEPT 运算符:
我测试过的一些示例代码:
CREATE TABLE #UsedSlide (SlideId INT NOT NULL, UserId INT NOT NULL, SomeOtherValue VARCHAR(10) NOT NULL)
CREATE TABLE #LegacySlide (SlideId INT NOT NULL, UserId INT NOT NULL)
INSERT INTO #UsedSlide(SlideId, UserId, SomeOtherValue)
VALUES
(1, 35, 'testing123'),
(2, 39, 'testingabc'),
(3, 24, 'testingxyz')
INSERT INTO #LegacySlide( SlideId, UserId )
VALUES (1, 35),
(2, 39)
SELECT SlideId, UserId
FROM #UsedSlide
EXCEPT
SELECT SlideId, UserId
FROM #LegacySlide
这会产生以下结果集:
SlideId UserId
------- ------
3 24
注意:EXCEPT 中的语句顺序在这里很重要。如果您将最后一条语句运行为:
SELECT SlideId, UserId
FROM #LegacySlide
EXCEPT
SELECT SlideId, UserId
FROM #UsedSlide
...不会产生预期的效果。这基本上是对集合的操作:找到不在元组集合中的“元组”。
EXCEPT 的配套运算符是 INTERSECT - 查找两个集合之间的共同元组。两者都是非常有用的运算符。
顺便说一句,我认为Oracle有一个MINUS运算符,大致相当于EXCEPT(有人可以验证并找到链接吗?)