WHERE中的SQL GROUP_CONCAT别名

时间:2014-01-15 09:29:34

标签: mysql sql

这是我的sql语句:

SELECT 
    tA.a1, GROUP_CONCAT(tB.b2) AS b2
FROM
    tableA tA
        LEFT JOIN
    tableB tB ON tA.a2 = tB.b1
WHERE
    CONCAT(tA.a1, b2) LIKE '%somestring%'
GROUP BY tA.a1;

我收到一条sql错误,上面写着“WHERE中未知列名b2”的内容。

3 个答案:

答案 0 :(得分:3)

SELECT 
    tA.a1, GROUP_CONCAT(tB.b2) AS b2
FROM
    tableA tA
        LEFT JOIN
    tableB tB ON tA.a2 = tB.b1
GROUP BY tA.a1
HAVING
    CONCAT(tA.a1, b2) LIKE '%somestring%';

答案 1 :(得分:2)

您无法在WHERE子句中使用别名 - 但在您的情况下甚至毫无意义,因为WHERE会对将被分组的行应用过滤器 while GROUP_CONCAT()收集已分组

的行

例如,您可以使用子查询执行此操作:

SELECT *
FROM
  (SELECT 
    tA.a1 AS ta1, GROUP_CONCAT(tB.b2) AS b2
  FROM
    tableA tA
        LEFT JOIN
    tableB tB ON tA.a2 = tB.b1
  GROUP BY tA.a1) AS grouped
WHERE 
  CONCAT(ta1, grouped.b2) LIKE '%somestring%'

答案 2 :(得分:2)

用于过滤汇总功能,请使用HAVING代替WHERE

select a,  group_concat(b) as b_aggregate from
tbl
where concat(a,b) like "%somestring%" -- not aggregate
group by a
having concat(a, group_concat(b)) like "%somestring%" -- aggregate