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

これにより、不特定の構文エラーが発生しますが、最初の2行を「Selectaw.player_id、map.id1」だけに置き換えると、期待値を持つ2列のテーブルが返されます(したがって、列名とテーブル参照はすべて正しいです) )。

明らかな何かが欠けているに違いありませんが、それは何ですか?

4

2 に答える 2

3

UPDATE 構文には FROM はありません。

SET の前に、UPDATE セクションでテーブルを定義する必要があります

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
于 2012-04-05T21:15:35.920 に答える
0

これは構文的に正しいはずです。ただし、それがあなたの望むことをするかどうかはよくわかりません。最初にステージング データでテストしてください。

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
于 2012-04-05T21:15:43.703 に答える