我想通过' user_location'来搜索用户这是location.detail的别名 我做了以下查询:
SELECT user.*, location.detail as user_location
FROM user
LEFT JOIN location
ON user.id = location.user_id
WHERE user_location = 'jakarta';
它产生的错误说,
Column not found: 1054 Unknown column 'user_location' in 'where clause'
为什么?解决办法是什么? 任何答案都将受到高度赞赏!
答案 0 :(得分:3)
您无法在创建它的同一查询中的位置使用别名。所以你应该这样做:
SELECT user.*, location.detail as user_location
FROM user
LEFT JOIN location
ON user.id = location.user_id
WHERE location.detail = 'jakarta';
如果您仍想使用该列,则必须将其包装在子查询中:
select * from
(
SELECT user.*, location.detail as user_location
FROM user
LEFT JOIN location
ON user.id = location.user_id
) a
where user_location = 'jakarta';
正如@ spencer7593所提到的,你可以在HAVING子句的同一个查询中使用别名。
答案 1 :(得分:2)
明显而正确的解决方案是重复WHERE
子句中的表达式。有时,表达式更复杂(想想距离计算)。 MySQL有一个SQL扩展,允许您为此目的使用HAVING
:
SELECT u.*, l.detail as user_location
FROM user u LEFT JOIN
location l
ON u.id = l.user_id
HAVING user_location = 'jakarta';
我实际上并没有为这个特定的查询推荐它(毕竟,“user_location”输入的时间比“l.detail”更长)。但在某些情况下,这可能很方便。
比这些注意事项更重要的是您的查询实际上是INNER JOIN
。你应该这样指定:
SELECT u.*, l.detail as user_location
FROM user u INNER JOIN
location l
ON u.id = l.user_id
WHERE l.detail = 'jakarta';
过滤条件过滤掉所有不匹配的行。使用LEFT JOIN
会不恰当地混淆人们并可能会使优化程序混淆。
答案 2 :(得分:1)
您不能在mysql的Where子句中使用别名。尝试
SELECT user.*, location.detail as user_location
FROM user
LEFT JOIN location
ON user.id = location.user_id
WHERE location.detail = 'jakarta';