SQL Group_concat无法获取所有数据

时间:2017-11-30 11:38:38

标签: mysql sql group-concat

我有2个表和第二个表使用关系

table1
id   name
---------
1    alpha
2    beta

table2
id   name  relation
-------------------
1    2015    2
2    2016    2
3    2017    2
4    2018    2

我想看看

name   data
-------------------------
beta   2015,2016,2017,2018
alpha  NULL

我尝试了以下sql查询,但输出不是我想要的

我用:

SELECT 
    t1.name,
    GROUP_CONCAT(t2.name SEPARATOR ',')
FROM table1 AS t1
LEFT JOIN table2 AS t2
    ON t2.relation = t1.id

输出:

alpha 2015,2016,2017,2018

Alpha在其他相关指法中没有任何价值。输出中的值属于beta。

2 个答案:

答案 0 :(得分:3)

您需要GROUP BY

SELECT t1.name,
       GROUP_CONCAT(t2.name SEPARATOR ',')
FROM table1 t1 LEFT JOIN
     table2 t2
     ON t2.relation = t1.id
GROUP BY t1.name;

在大多数数据库(以及最新版本的MySQL)中,您的查询都会失败。它是一个聚合查询(因为GROUP_CONCAT())。但是,t1.name不是聚合函数的参数,它不是GROUP BY密钥。

MySQL确实允许这种类型的查询。它只返回一行。结果集中一行的t1.name值来自任意一行。

答案 1 :(得分:0)

小提琴没有FK:

CREATE TABLE Table1    (`id` int, `name` varchar(5)) ;

INSERT INTO Table1
    (`id`, `name`)
VALUES
    (1, 'alpha'),
    (2, 'beta')
;


CREATE TABLE Table2    (`id` int, `name` int, `relation` int);

INSERT INTO Table2
    (`id`, `name`, `relation`)
VALUES
    (1, 2015, 2),
    (2, 2016, 2),
    (3, 2017, 2),
    (4, 2018, 2)
;

说明:

SELECT 
    t1.name,
    GROUP_CONCAT(t2.name SEPARATOR ',') -- missing an AS .... => ugly name from fiddle
FROM table1 AS t1
LEFT JOIN table2 AS t2
    ON t2.relation = t1.id
group by t1.name

输出:

name    GROUP_CONCAT(t2.name SEPARATOR ',')
alpha   (null)
beta    2017,2018,2015,2016