SQL Group_concat 没有得到所有数据

SQL Group_concat not get all data

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

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 在其他相关乐谱中没有任何价值。输出中的值属于测试版。

fiddle 没有 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

你需要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 允许此类查询。它 returns 刚好是一行。结果集中某一行的t1.name的值来自任意一行。