2012-04-05 2 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 

이 나에게 지정되지 않은 구문 오류를 제공하지만, 난 그냥 와 첫 두 줄을 교체하는 경우 ", map.id1을 aw.player_id 선택"을, 그것은 두 개의 열 테이블을 반환 (컬럼 이름과 테이블 참조가 모두 올 바릅니다).

나는 명백한 무엇인가 놓치고 있어야하지만 그것은 무엇입니까?

답변

3

UPDATE syntax에는 발신 번호가 없습니다.

당신은 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 섹션에서 테이블을 정의해야합니다. 그러나, 나는 그것이 정말로 당신이 원하는 것이 무엇인지 확신하지 못합니다. 스테이징 데이터를 먼저 테스트하십시오!

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 
관련 문제