SQL Server:比较两个表,两列
问题描述:
我有两个表。SQL Server:比较两个表,两列
-
TableA
(ID int, Match1 char, Match2 char, status char
) -
TableB
(Match1 char, match2
)
我希望标记行中tableA
在状态,其中对于同一match1, match2
不存在tableB
失败。
实施例:
表A
ID Match1 Match2 Status
1 100 AB
2 100 AR
3 200 BC
4 200 VB
5 200 AB
表B
Match1 Match2
100 AF
100 AR
100 BG
200 AB
200 BJ
200 VB
预期结果:
表A
ID Match1 Match2 Status
1 100 AB FAIL
2 100 AR NULL
3 200 BC FAIL
4 200 VB NULL
5 200 AB NULL
感谢
我使用(不工作):
Update A
set status = 'FAIL'
from TableA A
Inner join TableB B
ON A.match1 = B.match1
WHERE A.match2 <> B.Match2
答
UPDATE a
SET status = 'FAIL'
FROM TableA a
WHERE NOT EXISTS(SELECT NULL
FROM TableB b
WHERE a.match1 = b.match1
AND a.match2 = b.match2)
答
试试这个:
DECLARE @TableA TABLE (ID INT, Match1 VARCHAR(10), Match2 VARCHAR(10), MatchStatus VARCHAR(10))
INSERT INTO @TableA(ID, Match1, Match2)
VALUES(1, '100', 'AB'), (2, '100', 'AR'), (3, '200', 'BC'), (4, '200', 'VB'), (5, '200', 'AB')
DECLARE @TableB TABLE (Match1 VARCHAR(10), Match2 VARCHAR(10))
INSERT INTO @TableB VALUES('100', 'AF'), ('100', 'AR'), ('100', 'BG'), ('200', 'AB'),
('200', 'BJ'), ('200', 'VB')
UPDATE @TableA
SET MatchStatus = 'FAIL'
WHERE NOT EXISTS
(SELECT * FROM @TableB b
WHERE b.Match1 = [@TableA].Match1 AND b.Match2 = [@TableA].Match2)
SELECT * FROM @TableA
给我的输出:
ID Match1 Match2 MatchStatus
1 100 AB FAIL
2 100 AR NULL
3 200 BC FAIL
4 200 VB NULL
5 200 AB NULL
它为什么不起作用?你收到错误信息了吗?如果不是,你是否得到意想不到的输出?如果这样,那是什么? – 2011-10-11 20:31:21
表A失败表A –
中的所有记录marc_s:这是一个完全不同的问题! –