Ошибка: у каждой производной таблицы должен быть собственный псевдоним

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

Говорит:

«Каждая производная таблица должна иметь собственный псевдоним».

Как исправить эту проблему?


person Klausos Klausos    schedule 26.08.2013    source источник


Ответы (2)


Исправляем - точно так же, как это было показано в вашем сообщении об ошибке:

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';
person Alma Do    schedule 26.08.2013
comment
+1 за такое красивое объяснение, смеется :) - person Hanky Panky; 26.08.2013
comment
@ ØHankyPankyØ - Я думаю, что многие проблемы будут решены, если люди будут не просто замечать сообщения об ошибках, но на самом деле читать их и понимать: p - person Alma Do; 26.08.2013
comment
Собственно, ответ синтаксически неверен, потому что второй псевдоним не нужен и не подходит. - person Gordon Linoff; 26.08.2013
comment
@GordonLinoff - да, спасибо (скобки неуместны) - person Alma Do; 26.08.2013
comment
Теперь он говорит об усеченном неправильном значении времени: '6100.000000' - person Klausos Klausos; 26.08.2013
comment
@KlausosKlausos - это вопрос логики, а не синтаксиса. - person Alma Do; 26.08.2013
comment
@Alma Do Mundo: Цель состоит в том, чтобы просто вычислить значение задержки для заданного поля, указанного в _1 _ = '3517'. - person Klausos Klausos; 26.08.2013
comment
Теперь он говорит об усеченном неправильном значении времени: «7400.000000». Задержка поля - varchar. Я не понимаю, почему Minute (ETA-STA) дает 7400, хотя это должно быть равно 7 минутам. - person Klausos Klausos; 26.08.2013
comment
STA: 26.08.2013, 20:30:00 Расчетное время: 26.08.2013, 21:04:00 - person Klausos Klausos; 26.08.2013
comment
@KlausosKlausos - см. Мою правку по этой проблеме - person Alma Do; 26.08.2013
comment
Основываясь на вашем последнем обновлении, я пришел к следующему решению: UPDATE FlightSchedule SET delay = MINUTE (TIMEDIFF (ETA, STA)) WHERE _2 _ = '3729'; - person Klausos Klausos; 26.08.2013

Проблема во вложенном подзапросе. Но вам это даже не нужно. Правильный способ написать этот запрос:

UPDATE `FlightSchedule` 
    SET delay = MINUTE(ETA - STA)
    WHERE `flightNum_arr`='3517';
person Gordon Linoff    schedule 26.08.2013
comment
Вы не можете указать целевую таблицу FlightSchedule для обновления в предложении FROM - person Klausos Klausos; 26.08.2013
comment
@KlausosKlausos. . . Извините, это был один шаг в моих рассуждениях. - person Gordon Linoff; 26.08.2013
comment
Мне нужно использовать МИНУТУ (ETA - STA). Подскажите, пожалуйста, как использовать это в своем решении? - person Klausos Klausos; 26.08.2013