错误:每个派生表都必须有自己的别名

时间:2013-08-26 12:58:22

标签: php mysql sql datediff

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

表示:

  

“每个派生表都必须有自己的别名”。

如何解决此问题?

2 个答案:

答案 0 :(得分: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';

答案 1 :(得分:3)

问题出在嵌套子查询中。但你甚至不需要它。编写此查询的正确方法是:

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