2012-04-05 35 views
1

我有一個表'玩家'和'獎項'。我有一些重複的玩家條目,它們有不同的id,但是有相同的信息。使用另一個查詢從聯接中更新表?

我試圖更新與第二個玩家條目相關的獎項,以便我最終可以刪除重複項。

這顯然不是最有效的查詢,但它只需要運行一次,而且只有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」,它返回一個兩列的表與期望的值(所以列名和表引用都是正確的)。

我必須錯過一些明顯的東西,但它是什麼?

回答

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

ahhh非常感謝你。我知道這很愚蠢。我對sql的缺乏經驗清楚地顯示出來! – pclem12 2012-04-05 21:20:37

+0

我很高興我能幫忙:) – 2012-04-05 21:22:51

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 
相關問題