Sql server 筛选一个表中出现在另一个sql server中的行
我正在尝试在SQLServer2005中执行筛选操作 例如。假设我们有两个表,Current和RejectSql server 筛选一个表中出现在另一个sql server中的行,sql-server,sql-server-2005,Sql Server,Sql Server 2005,我正在尝试在SQLServer2005中执行筛选操作 例如。假设我们有两个表,Current和Reject Current = 1, 2, 3, 4, 5, 1, 2 Reject = 2, 3, 4 Current \ Reject = 1, 2, 5 如您所见,这两个表共享值。我基本上只想减去这些共享值,然后将它们放到一个新表中 这是我试过的,但没用。(A是要匹配的列) 请注意,下面的元素2已被过滤掉,即使它不应该被过滤掉 马丁·史密斯的回答对这个案子起了作用 编辑 好吧,让我们把它
Current = 1, 2, 3, 4, 5, 1, 2
Reject = 2, 3, 4
Current \ Reject = 1, 2, 5
如您所见,这两个表共享值。我基本上只想减去这些共享值,然后将它们放到一个新表中
这是我试过的,但没用。(A是要匹配的列)
请注意,下面的元素2已被过滤掉,即使它不应该被过滤掉
马丁·史密斯的回答对这个案子起了作用
编辑 好吧,让我们把它复杂一点。假设我的情况与以前完全相同,只是这次我需要匹配三列而不是一列
Current = (1, 2, 3), (2, 3, 4), (2, 3, 4), (4, 5, 6), (7, 8, 9), (1, 2, 3)
Reject = (2, 3, 4), (4, 5, 6), (7, 8, 9)
Current \ Reject = (1, 2, 3), (2, 3, 4)
是的,没错。元素2在Current中出现两次,但在Reject中仅出现一次。所以我希望元素2出现在我的结果中。这有意义吗?它是说ROW_NUMBER()需要一个ORDER BY子句。好吧,我知道我在问题中没有问这个问题,但假设我需要根据另外两列进行筛选,比如B和C。我只需要按a、B、C进行分区,然后选择它们吗?@TommyFisk-请编辑您的问题,以提供一个示例来说明您的意思。
Current = (1, 2, 3), (2, 3, 4), (2, 3, 4), (4, 5, 6), (7, 8, 9), (1, 2, 3)
Reject = (2, 3, 4), (4, 5, 6), (7, 8, 9)
Current \ Reject = (1, 2, 3), (2, 3, 4)
WITH [Current](a, b, c)
AS (SELECT 1, 2, 3 UNION ALL
SELECT 2, 3, 4 UNION ALL
SELECT 2, 3, 4 UNION ALL
SELECT 4, 5, 6 UNION ALL
SELECT 7, 8, 9 UNION ALL
SELECT 1, 2, 3),
Reject(a, b, c)
AS (SELECT 2, 3, 4 UNION ALL
SELECT 4, 5, 6 UNION ALL
SELECT 7, 8, 9 ),
T(RN, a, b, c)
AS (SELECT ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY (SELECT 0)),
a,
b,
c
FROM [Current]
EXCEPT
SELECT ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY (SELECT 0)),
a,
b,
c
FROM Reject)
SELECT DISTINCT a,
b,
c
FROM T