mysql组concat unknow列错误

时间:2018-05-27 14:23:54

标签: mysql sql join

我正在尝试在名字和姓氏字段上搜索查询

这是我的查询

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'

2 个答案:

答案 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;
相关问题