2012-04-05 19 views
1

私はテーブル「選手」と「賞」を持っています。私は異なるIDを持っているが、そうでなければ同じ情報を持っているいくつかの重複したプレイヤーエントリーを持っています。別のクエリで結合からテーブルを更新しますか?

私は最終的に重複を削除できるように、2番目のプレイヤーのエントリに関連付けられている賞を更新しようとしています。

これは明らかに最も効率的なクエリではありませんが、実行する必要があるのは1回で、10-15回の複製しかありません。 これまでのところ、私はこれがあります。

UPDATE aw 
SET aw.player_id = map.id1 
FROM awards as aw, 
    (SELECT a.id as id1, b.id as id2 
    FROM players a, players b 
    WHERE a.first_name = b.first_name 
    AND a.last_name = b.last_name 
    AND a.id != b.id 
    AND a.team is not null 
    AND a.college is not null) as map 
WHERE map.id2 = aw.player_id 

これは私に指定されていない構文エラーになりますが、私は「aw.player_id、map.id1を選択し、」ただ で最初の2行を交換する場合、それは2つの列のテーブルを返します(カラム名とテーブル参照はすべて正しい)ので、期待値と比較する必要があります。

明らかに何かが間違っている必要がありますが、それは何ですか?

答えて

3

UPDATE syntaxにFROMはありません。

あなたは、これは文法的に正しいはずSET

UPDATE awards as aw, 
    (SELECT a.id as id1, b.id as id2 
    FROM players a, players b 
    WHERE a.first_name = b.first_name 
    AND a.last_name = b.last_name 
    AND a.id != b.id 
    AND a.team is not null 
    AND a.college is not null) as map 
SET aw.player_id = map.id1 
WHERE map.id2 = aw.player_id 
+0

ああありがとうございました。私はそれが何かばかげたことを知っていた。 SQLの私の未経験は明らかに表示されています! – pclem12

+0

私は助けてくれると嬉しいです:) –

0

前に、UPDATEセクションでテーブルを定義する必要があります。しかし、私はそれがあなたがしたいことをdoeas本当に確信していません。 最初にステージングデータをテストしてください!

UPDATE 
    players AS a 
INNER JOIN 
    players AS b 
ON 
    a.first_name = b.first_name 
    AND a.last_name = b.last_naem 
    AND a.id != b.id 
    AND a.team IS NOT NULL 
    AND a.college IS NOT NULL 
INNER JOIN 
    awards AS aw 
ON 
    b.id = aw.player_id 
SET 
    aw.player_id = a.id 
関連する問題