在连接表上搜索全名

时间:2014-05-06 16:24:30

标签: mysql

我已经在连接表上写了一个按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' 

2 个答案:

答案 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