2011-09-12 18 views
-1

TableAのSQL:他のテーブルに基づいて列を更新

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

TableBの

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 

私があれば 'FAIL' でテーブルBのCOL =状況を移入します:TableBのからそのMatchID1ため ALL matchID2がテーブルAの対応するMAatchID1のmatchID2と等しくない この場合、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)1場合でも、MATCH01のためのセット全体を失敗します。テーブルBのid 6 & 7のように。前もって感謝します。

+0

あなたは1つの手順でそれを行うことができます神託を使用している場合。 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. 第1のテーブルに第2のテーブルの一致番号があるかどうかを調べるための小さなクエリです。それを書いてください。

  3. 最初の2つのクエリに基づいて値を設定する更新。

HTH

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 
関連する問題