Неизвестный столбец 'B.in_out' в предложении MySQL - PullRequest
1 голос
/ 06 мая 2020

Я уже запутался в том, как оставить соединение с той же таблицей, я делаю запрос на левое соединение следующим образом:

SELECT CASE
WHEN A.time BETWEEN '06:15:00' AND '11:59:00' THEN "IN"
WHEN A.time BETWEEN '12:00:00' AND '23:59:00' THEN "OUT"
WHEN A.time BETWEEN '00:00:00' AND '06:14:00' THEN "OUT"
END in_out, A.no_reg, A.date, A.date_time AS time_in, B.date_time AS time_out
FROM raw_attendance A
LEFT JOIN raw_attendance B
   ON A.no_reg = B.no_reg
      AND A.date_time < B.date_time
      AND B.in_out = 'OUT'
HAVING A.in_out = 'IN'

Но результат:

Unknown column 'B.in_out' in 'on clause'

Кто угодно может мне помочь скажите мне, где я пропускаю свой запрос и делаю ошибку? Спасибо

1 Ответ

1 голос
/ 06 мая 2020

Невозможно повторно использовать выражение CASE с псевдонимом, определенное в предложении select, в предложении WHERE на том же уровне. Вот один обходной путь для того, что, я думаю, вы пытаетесь здесь сделать:

SELECT
    CASE WHEN A.time BETWEEN '06:15:00' AND '11:59:00' THEN 'IN'
         WHEN A.time BETWEEN '12:00:00' AND '23:59:00' THEN 'OUT'
         WHEN A.time BETWEEN '00:00:00' AND '06:14:00' THEN 'OUT' END in_out,
    A.no_reg,
    A.date,
    A.date_time AS time_in,
    B.date_time AS time_out
FROM raw_attendance A
LEFT JOIN raw_attendance B
    ON A.no_reg = B.no_reg AND
       A.date_time < B.date_time AND
       (B.time BETWEEN '00:00:00' AND '06:14:00' OR
        B.time BETWEEN '12:00:00' AND '23:59:00')
WHERE
    A.time BETWEEN '06:15:00' AND '11:59:00';

В этой версии вместо того, чтобы пытаться повторно использовать выражение CASE, я просто включаю исходные проверки диапазона, которые определяли либо результат IN или OUT. Если вы действительно хотите повторно использовать выражение CASE, вам, возможно, придется выполнить подзапрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...