MySQL 带左连接条件的 case 语句

MySQL case statement with left join condition

我在下面有一个 MySQL 请求,但它无法正常工作。

错误:

#1054 - Unknown column 'uid' in '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

如何写出正确的请求?

您不能在同一个 SELECTWHERE 子句中引用列别名,因为 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