我已经在连接表上写了一个按fullname搜索的查询,但是我收到了这个错误。任何想法?
SELECT wrs.id, wrs.fname, wrs.sname, wrs.email1, wrs.applied, wrs.firstlogin, wrs.tel1,
SUBSTR( wrs.lastlogin, -10 ) AS last_login,
CONCAT_WS( ' ', wrs.fname, wrs.sname ) AS full_name, wqs.level,
wqs.subject, wqs.university, wqs.dissertation
FROM temp_users AS wrs
LEFT JOIN writer_qualifications AS wqs ON wqs.writer_id = wrs.id
WHERE wrs.fname LIKE '%micky%'
OR wrs.sname LIKE '%micky%'
OR full_name LIKE '%micky%'
AND wrs.status = '1'
GROUP BY wrs.id
MySQL said: Documentation
#1054 - Unknown column 'full_name' in 'where clause'
答案 0 :(得分:1)
您不能在WHERE子句中使用full_name
之类的别名,请参阅manual
标准SQL不允许在WHERE子句中引用列别名。 强制执行此限制是因为WHERE子句是 评估后,列值可能尚未确定。
所以你必须在WHERE子句中使用表达式CONCAT_WS( ' ', wrs.fname, wrs.sname )
而不是别名full_name
:
SELECT wrs.id, wrs.fname, wrs.sname, wrs.email1, wrs.applied, wrs.firstlogin, wrs.tel1,
SUBSTR( wrs.lastlogin, -10 ) AS last_login,
CONCAT_WS( ' ', wrs.fname, wrs.sname ) AS full_name, wqs.level,
wqs.subject, wqs.university, wqs.dissertation
FROM temp_users AS wrs
LEFT JOIN writer_qualifications AS wqs ON wqs.writer_id = wrs.id
WHERE wrs.fname LIKE '%micky%'
OR wrs.sname LIKE '%micky%'
OR CONCAT_WS( ' ', wrs.fname, wrs.sname ) LIKE '%micky%'
AND wrs.status = '1'
GROUP BY wrs.id
答案 1 :(得分:0)
您不能在WHERE子句中使用聚合的别名(' full_name'),因为服务器通常在聚合工作之前处理WHERE子句。这个问题/答案有很多选择和解释:Reference alias (calculated in SELECT) in WHERE clause