2011-09-12 52 views
-1

表ASQL:根據其它表

ID MatchID1 MatchID2 
1 1002 120 
3 1003 141 
5 1006 150 
6 1008 140 

表B更新列

ID MatchID1 MatchID2 Status 
1 1002  120 
2 1002  120 
3 1002  120 
4 1003  200 
5 1006  150 
6 1008  150 
7 1008  140 

我要填充與 '失敗' 表B列=狀態,如果: ALL matchID2其MatchID1從tableB的不等於表A中對應的MAatchID1的匹配ID2 在這種情況下,tableB:120對應於1002,對於tableA同樣如此,因此不會失敗。 預期結果:

ID MatchID1 MatchID2 Status 
    1 1002  120 NULL 
    2 1002  120 NULL 
    3 1002  120 NULL 
    4 1003  200 FAIL 
    5 1006  150 NULL 
    6 1008  150 FAIL 
    7 1008  140 FAIL 

注: 如果連一個記錄(match02)不匹配,失敗match01一整套。如表B中的id 6 &7。提前致謝。

+0

如果您使用的是Oracle,你可以用一個程序做。只有SQL,我不能保證你能做到。 –

回答

1
UPDATE a 
SET Status = 'FAIL' 
FROM TableA a 
    INNER JOIN (
    SELECT a.MatchID1 
    FROM TableA a 
     INNER JOIN b ON a.MatchID1 = b.MatchID1 AND a.MatchID2 <> b.MatchID2 
    GROUP BY a.MatchID1 
) x ON a.MatchID1 = x.MatchID1 
0

我認爲你正在通過連接尋找更新。嘗試這個;

UPDATE TableB 
SET TableB.Status = CASE WHEN TableA.ID IS NULL THEN 'FAIL' ELSE NULL END 
FROM TableB 
LEFT JOIN TableA 
ON TableB.MatchID1 = TableA.MatchID1 
    AND TableB.MatchID2 = TableA.MatchID2 

你沒有說你正在使用哪個RDBMS,上面是針對SQL Server的。

0

重讀..仍然不知道你問什麼...

建議將你的努力分解成更小的塊。

看來你需要幾件事情:

  1. 小查詢得到的只是來自或不具有不同的匹配數字表頭行。寫這個。

  2. 一個小查詢,用於查找是否在第一個表中找到第二個表中的匹配編號。寫這個。

  3. 一個基於前兩個查詢設置值的更新。

心連心

1
update B 
    set status = 'FAIL' 
    From tableB B 
    INNER JOIN (SELECT B.matchID1 FROM TableB B 
       GROUP BY B.matchID1 
       HAVING MAX(matchID1)<> MIN(MatchID2)) B1 
    ON B.matchid1 = B1.MatchID1 

UPDATE B 
SET Status = 'FAIL' 
FROM TableB B 
    INNER JOIN TableA A 
    ON A.MatchID1 = B.matchID1 
WHERE A.matchID2 <> B.matchID2