2012-01-12 3 views
0

は、私は次の列で、データベース内の2つのテーブルを持っているSQL:チェックが

表1

athleteId | sportTypeId 
205  | 5 
206  | 5 
206  | 6 
207  | 4 
208  | 1 
208  | 4 

をため、私が作ったエラー(おっと)に、2番目の表は、持っていますこのようないくつかの情報:

表2 *

athleteId | sportTypeId 
    205  | 4 
    206  | 4 
    207  | 4 
    208  | 4 
    NULL | 4 

私はいくつかのアスリートに間違ってathleteIdを割り当てたので、すべての行をTable2にチェックし、一致する行がTable1であるかどうか確認してください。 athleteId 205206からTable2までを含む行は、をNULLに設定します(の4Table1にありません)。 athleteId 207208が残る(Table1に行があり、sportTypeId of 4)。

Table1にいくつかのアスリートが2回出現することに注意してください。

私はSQL Server 2008を使用しています。

ありがとう!

答えて

1

に一致する行がない場合は、Table2から行を削除する方法を求めていますか?もしそうなら、ここでそれを行う方法です:

DELETE t2.* 
FROM Table2 AS t2 
LEFT JOIN Table1 AS t1 ON t2.athleteId = t1.athleteId AND t2.sportTypeId = t1.sportTypeId 
WHERE t1.athleteId IS NULL; 

この理由は、左結合とwhere節のためです。 Table1に一致するレコードが見つからない場合は、左結合によりt1.athleteIdがNULLになります。

編集:あなただけの行全体を削除する代わりにnullにathleteIdを設定したい場合は、それは小さな変更だ:私は「削除」の意味を正確に明らかにすることを試みた

UPDATE t2 
SET t2.athleteId = null 
FROM Table2 AS t2 
LEFT JOIN Table1 AS t1 ON t2.athleteId = t1.athleteId AND t2.sportTypeId = t1.sportTypeId 
WHERE t1.athleteId IS NULL; 
+0

。私はあなたがそれの要点に行くと思う。ありがとう! –

+0

私のデータベースに何かが欠けているはずです。私は期待された結果を得ていない。 'Table2'の' athleteId'の 'NULL'エントリが違いになりますか?私は私の質問を更新しました。助けてくれてありがとう。 –

+0

@TylerDeWittこの場合、違いはありません。予期しない結果の例を挙げることができますか? – ean5533

1
update table2 set athleteid = null where not exists (
    select * 
    from table1 
    where athleteid = table2.athleteid and sporttypeid = table2.sporttypeid 
) 
+0

これは魅力のようにも機能しました –