我有两张桌子。
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
答案 0 :(得分:2)
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)
答案 1 :(得分:0)
试试这个:
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