Оператор MySQL с условием левого соединения
У меня есть запрос MySQL ниже, и он не работает правильно.
Ошибка:
# 1054 - Неизвестный столбец 'uid' в 'on clause'
Запрос:
SELECT
u.email,
CASE
WHEN c.from_user_id = '301' THEN c.to_user_id
WHEN c.to_user_id = '301' THEN c.from_user_id
END AS uid
FROM `contacts` AS c
LEFT JOIN `users` AS u
ON u.id = uid
HAVING uid >0
Как я могу написать правильный запрос?
1 ответ
Решение
Вы не можете ссылаться на псевдоним столбца в WHERE
пункт того же SELECT
, так как WHERE
используется для поиска строк до SELECT
пункт действует на них. Поместите это в подзапрос.
SELECT u.email, c.uid
FROM (SELECT CASE
WHEN from_user_id = '301' THEN to_user_id
ELSE from_user_id
END AS uid
FROM contacts
WHERE from_user_id = '301' OR to_user_id = '301') AS c'
LEFT JOIN users AS u
ON u.id = c.uid