Оператор 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
Другие вопросы по тегам