MySQL неожиданная проблема области при ссылке на столбцы - PullRequest
0 голосов
/ 19 февраля 2019

Опираясь на предыдущий вопрос, здесь (stackoverflow): Как эффективно предварительно фильтровать строки в сочетании с объединением?

Более универсальное решение этой проблемы было предоставлено Nick , как показано ниже.

Особо следует отметить использование "diff" второй раз для "diff / 2", для которого я теперь успешно использовал эту концепцию несколько раз.

Проблема в том, что у меня есть другой пример, когда он не работает, и я не могу понять, почему.Похоже на проблему "разбора" MariaDB / mysql, но я новичок.; -)

Спасибо за любые идеи.= D

Функциональный / рабочий пример:

SELECT scanid,
       event_id,
       object_id,
       obj_timestamp,
       obj_counter,
       diff,
       diff / 2 AS hdiff
FROM   (SELECT t1.scanid,
               t1.event_id,
               t1.object_id,
               t1.obj_timestamp,
               t1.obj_counter,
               Timediff(t1.obj_timestamp, t2.obj_timestamp) AS diff
        FROM   event_data AS t1
               LEFT JOIN event_data AS t2
                      ON t2.obj_counter = t1.obj_counter - 1
                         AND t2.object_id = t1.object_id
        WHERE  t1.object_id = 2
        ORDER  BY t1.obj_counter) AS diffs

Мой код - это работает, если я не пытаюсь заменить показанную строку комментарием:

SET @distance=1000;
SELECT event_id,
       timestamp,
       t1.overall_time,
       TIME_TO_SEC(t1.overall_time) AS overall_secs,
--       @distance / overall_secs AS overall_kph
       @distance / TIME_TO_SEC(t1.overall_time) AS overall_kph
FROM   (SELECT event_id,
               timestamp,
               TIMEDIFF(MAX(timestamp), MIN(timestamp)) AS overall_time
        FROM   summary
        GROUP BY event_id) AS t1;

Ошибкадано, когда я пытаюсь сослаться на total_secs сразу после того, как он был указан как столбец (замените строку @distance комментарием, чтобы увидеть эту ошибку):

ERROR 1054 (42S22) at line 120 in file: 'summary.sql': Unknown column 'overall_secs' in 'field list'

1 Ответ

0 голосов
/ 20 февраля 2019

Извините, SQL не работает таким образом.«Псевдонимы» не доступны до нескольких шагов спустя.Я думаю, что стандарт позволяет оценивать «столбцы» в SELECT в любом порядке.

Таким образом, ваша закомментированная строка также может быть

@distance / TIME_TO_SEC(t1.overall_time) AS overall_kph
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...