2014-05-06 58 views
0

我已经写了一个查询来在连接表上按全名搜索,但是我得到这个错误。任何想法?在连接表上搜索全名

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

for'OR full_name LIKE'%micky%''为true,无论是'wrs.fname LIKE'%micky%''和'wrs.sname LIKE '%micky%'已经是真的 – Ejaz

+0

谢谢Ejay。你是什​​么意思的资格 – Fury

+0

看到这个问题:http://stackoverflow.com/questions/11182339/reference-alias-calculated-in-select-in-where-clause – WillardSolutions

回答

1

不能使用别名,如WHERE子句中full_name,看到manual

标准SQL不允许在WHERE子句中的列别名引用。 此限制是因为在WHERE子句为 求值时,列值可能尚未确定。

所以你必须使用表达式CONCAT_WS( ' ', wrs.fname, wrs.sname)在WHERE子句中,而不是别名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 
+0

你有什么建议呢?这是什么?!! OR CONCAT_WS('',wrs.fname,wrs.sname)LIKE'%micky%' – Fury

+0

是的,与您的'full_name'相同的构造,而不是别名'full_name'。 – VMai

+0

得到它的工作。队友的欢呼声 – Fury