2013-08-26 7 views
0
UPDATE `FlightSchedule` 
SET delay=(
    SELECT * 
    FROM (
    SELECT 
     MINUTE(ETA - STA) 
    FROM `FlightSchedule` 
     WHERE `flightNum_arr` = '3517' 
) 
) 
WHERE `flightNum_arr` = '3517'; 

"모든 파생 테이블에는 고유 한 별칭이 있어야합니다"라고 표시됩니다. 이 문제를 해결하는 방법? 그것은 당신의 오류 메시지에 표시된 정확히 같은 -MySQL : 파생 테이블마다 고유 한 별칭이 있어야합니다.

답변

3

을 고정 : 실제로 위가 더 정확한 제안을

UPDATE `FlightSchedule` 
SET delay= 
(SELECT update_field 
FROM 
(
    SELECT MINUTE (ETA - STA) AS update_field 
    FROM `FlightSchedule` 
    WHERE `flightNum_arr`='3517' 
) AS internal_0 
) 
WHERE `flightNum_arr`='3517'; 

-하지만 (고든의 답변을 참조) 모두에서 중첩 된 하위 쿼리 제거. (주석 기준)

편집 : 중첩 된 하위 쿼리에

UPDATE `FlightSchedule` 
    SET delay = TIMEDIFF(ETA - STA) 
    WHERE `flightNum_arr`='3517'; 
+0

+1, 롤 : –

+0

ØHankyPankyØ @ - 나는 실제로 사람들은 오류 메시지를 통지하지 않을 경우 많은 문제가 해결 될 것이라고 생각하지만, _read_ them 및 ** understand ** ** : p –

+0

실제로 두 번째 별칭이 필요하지 않고 적절하지 않기 때문에 대답이 구문 상 올바르지 않습니다. –

3

문제는 다음과 같습니다

당신이 차이를 찾을 TIMEDIFF 기능을 사용하려면

. 그러나 당신은 그것을 필요로하지 않습니다. 이 쿼리를 작성하는 올바른 방법은 다음과 같은 좋은 설명은

UPDATE `FlightSchedule` 
    SET delay = MINUTE(ETA - STA) 
    WHERE `flightNum_arr`='3517'; 
+0

FROM 절 –

+0

@KlausosKlausos에서 업데이트 할 대상 테이블 'FlightSchedule'을 지정할 수 없습니다. . . 미안하지만 그건 내 추론의 한 걸음 이었어. –

+0

MINUTE (ETA - STA)를 사용해야합니다. 솔루션에서 사용하는 방법을 알려주시겠습니까? –