2011-10-11 210 views
0

我有兩個表。SQL Server:比較兩個表,兩列

  • TableAID int, Match1 char, Match2 char, status char
  • TableBMatch1 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

它爲什麼不起作用?你收到錯誤信息了嗎?如果不是,你是否得到意想不到的輸出?如果這樣,那是什麼? – 2011-10-11 20:31:21

+0

表A失敗表A –

+0

中的所有記錄marc_s:這是一個完全不同的問題! –

回答

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) 
+0

什麼是「a」?請解釋 – John

+0

是否正確,但它說#1064 - 你的SQL語法有錯誤; 「FROM TableA WHERE NOT EXISTS(SELECT NULL FROM T'at line 3 – John

+0

@John 1)」a「是TableA的別名,2)檢查與您的MySQL服務器版本對應的手冊答案專門用於SQL Server。 MySQL不支持這種形式的更新和3)我希望你沒有downvote這個答案,因爲你試圖取消它的背景。 –

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