2011-09-12 4 views
4

SQL의이 부분을 업데이트 스크립트로 사용하여 절을 업데이트 할 테이블을 포함 할 수없는 작업을 추가하려고했습니다. 이 문은 하위 쿼리를 사용하지만이 작업을 수행하는 데 어려움을 겪습니다.중첩 된 하위 쿼리 (sum)로 업데이트 제한 절을 얻으려면

Essientially 테이블 2의 필드 합계를 사용하여 테이블 1에서 vailue를 업데이트해야하지만 두 개의 다른 필드가 두 테이블에서 일치하고 필드 6을 기준으로 제한이 업데이트 절에 적용됩니다.

 UPDATE table1 W SET Field1=(SELECT field2 FROM 
    (SELECT A.id, B.field3, SUM(A.field2) AS field2 
    FROM table2 A, table3 B, table4 P 
    WHERE A.id=B.id AND P.field6=B.field6) B) WHERE W.field6=B.field6 

실세계 예에서 럭비 선수가 경기에 참여했을 때 럭비 경기에서 인정한 점수의 합계를 선택하십시오. 테이블 2에는 결과 (점수 포함)가 있습니다. 테이블 3에는 팀 시트가 있고 테이블 1과 4는 업데이트 할 플레이어 테이블입니다.

바라건대 이것은 충분히 명확하고 누군가 올바른 방향으로 나를 가리킬 수 있습니다.

 UPDATE $WSLKEEP W, $WSLFIX A, $WSLFIXPLAY B 
    SET W.F_CONCEDED=SUM(A.F_AGAINST) 
    WHERE A.F_ID=B.F_GAMEID 
    AND B.F_NAME=W.F_NAME" 

하지만 지금은 함께 붙어 : 그룹 기능의 잘못된 사용

종류는 업데이트 쿼리를 들어

답변

5

서브 쿼리가 field6에 그룹화되어 있고 내부 조인에 해당 열이 table1 인 것으로 보이는 것 같습니다. 명시 적 조인에 찬성 조인 쉼표를 사용하여 우리가에있는 동안, 나는 또한 자제를 추천 할 것입니다 그리고

UPDATE table1 W 
    INNER JOIN (
    SELECT B.field6, SUM(A.field2) AS field2 
    FROM table2 A, table3 B, table4 P 
    WHERE A.id=B.id AND P.field6=B.field6 
    GROUP BY B.field6 
) B ON W.field6=B.field6 
SET W.Field1 = B.Field2 

(AB) : 여기 당신이 in MySQL 그렇게 방법입니다. 후자는 처음에는 다른 구문에 오랫동안 익숙해 진 이후 처음에는 흔하지 않았지만 매우 빨리 습관화되고 훨씬 직관적이 될 수 있습니다. A great deal이이 주제에 대해 말 해졌고 어떤 사람들은 쉼표 결합에 대해 아주 강한 의견을 갖고있을 수 있습니다. 나는 쉼표 조인은 여전히 ​​그들의 사용 몫을 가질 수 있다고 말한다. 그러나 조건에 합류 할 때 현재 ANSI 구문을 선택해야합니다.

여기에 조인 명시 적으로 사용할 수 있도록 변환 된 하위 쿼리와 함께 위의 진술입니다 :

UPDATE table1 W 
    INNER JOIN (
    SELECT B.field6, SUM(A.field2) AS field2 
    FROM table2 A 
     INNER JOIN table3 B ON A.id = B.id 
     INNER JOIN table4 P ON P.field6 = B.field6 
    GROUP BY B.field6 
) B ON W.field6 = B.field6 
SET W.Field1 = B.Field2 
+0

정말 감사합니다. 실제로 많은 의미가 있습니다! :-) – ChelseaStats

2

에 관하여 위, 포함시킬 수 있습니다 한 것처럼

은 다음과 시도 UPDATE 절에있는 여러 테이블을 모두 업데이트하지 않아도됩니다. 이렇게하면 하위 쿼리가 불필요 해지고 실행 속도가 상당히 빨라집니다. 예를 들어, 이와 같은 작업을 수행 할 수 있습니다.

UPDATE table1 W, table2 A, table3 B, table4 P 
SET W.Field1 = SUM(A.field2) ... 

나는 정확히 업데이트 하려는지의 세부 사항에 대한 불분명 해요,하지만 난 당신이 종종 구문의이 종류를 사용하여 하위 쿼리를 피할 수 있음을 넣고 싶었다.

+0

우 i는, 명확하게! 난 그 갈 줄 그 도움이되는지 확인합니다 알고하지 않았다. – ChelseaStats

+0

현재 상황이 업데이트 된 게시물이며 그룹 기능 오류로 작동하도록 쿼리를 가져올 수 없습니다. – ChelseaStats

관련 문제