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
的值来自任意一行。
我有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
的值来自任意一行。