2012-04-05 4 views
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», он возвращает таблицу в два столбца с ожидаемыми значениями (так что имена столбцов и ссылки на таблицы верны).

Должно быть, мне что-то не хватает, но что это?

ответ

3

В ОТСЕДАНИИ UPDATE syntax нет.

Вы должны определить таблицы в разделе UPDATE перед 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

+0

Я рад, что смог помочь :) –

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 
Смежные вопросы