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
如何写出正确的请求?
您不能在同一个 SELECT
的 WHERE
子句中引用列别名,因为 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
我在下面有一个 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
如何写出正确的请求?
您不能在同一个 SELECT
的 WHERE
子句中引用列别名,因为 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