我正在尝试在名字和姓氏字段上搜索查询
这是我的查询
SELECT d.title, GROUP_CONCAT(u.firstName,' ',u.lastName) as fullname
FROM DEALS d
left JOIN USER u ON u.idUser = d.userId
WHERE ((d.title LIKE '%goutham%' OR d.keywords LIKE '%goutham%')
OR fullname LIKE '%goutham%') AND d.isPublic=1
但我得到了
'where子句'中的未知列'fullname'
答案 0 :(得分:0)
您无法在where
中使用列别名。它与您的查询的其余部分无关。
您没有GROUP BY
,因此我怀疑GROUP_CONCAT()
无意。相反,你想要CONCAT()
。您可以在WHERE
中重复表达式,但我认为您应该查看每个组件:
SELECT d.title, CONCAT(u.firstName, ' ', u.lastName) as fullname
FROM DEALS d left JOIN USER
u
ON u.idUser = d.userId
WHERE (d.title LIKE '%goutham%' OR
d.keywords LIKE '%goutham%' OR
u.firstName LIKE '%goutham%' OR
u.lastName LIKE '%goutham%'
) AND
d.isPublic = 1;
如果您关心性能并且正在寻找单词,那么您可能需要研究MySQL的全文索引功能。
如果您仍想查看组合,我建议您重复使用表达式:
WHERE (d.title LIKE '%goutham%' OR
d.keywords LIKE '%goutham%' OR
CONCAT(u.firstName, ' ', u.lastName) LIKE '%goutham%'
) AND
d.isPublic = 1;
答案 1 :(得分:0)
问题的直接原因是您无法引用同一查询的SELECT
子句中WHERE
子句中定义的别名。解决方案是重复整个表达式而不是使用别名。但是,根据您的评论,您确实要检查名字,所以请执行以下操作:
SELECT
d.title,
CONCAT(u.firstName, ' ', u.lastName) AS fullname
FROM DEALS d
LEFT JOIN USER u
ON u.idUser = d.userId
WHERE
(d.title LIKE '%goutham%' OR
d.keywords LIKE '%goutham%' OR
u.firstName LIKE '%goutham%') AND d.isPublic = 1;