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

言います:

「すべての派生テーブルには独自のエイリアスが必要です」。

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

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';

しかし、実際にはもっと正しい提案があります-そのネストされたサブクエリをまったく取り除きます(ゴードンの答えを参照)。

編集(コメントに基づく)

違いを見つけたい場合は、TIMEDIFF関数を使用します。

UPDATE `FlightSchedule` 
    SET delay = TIMEDIFF(ETA - STA)
    WHERE `flightNum_arr`='3517';
于 2013-08-26T12:59:40.410 に答える
3

問題は、ネストされたサブクエリにあります。しかし、あなたはそれさえ必要としません。このクエリを記述する正しい方法は次のとおりです。

UPDATE `FlightSchedule` 
    SET delay = MINUTE(ETA - STA)
    WHERE `flightNum_arr`='3517';
于 2013-08-26T13:02:08.277 に答える