我有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。
答案 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