gpt4 book ai didi

MySQL group_concat 问题

转载 作者:行者123 更新时间:2023-11-29 05:25:12 25 4
gpt4 key购买 nike

我有多个表需要连接一组结果。总共有 6 个表,每个表中都有一个索引与初始表中的 primary_key 匹配。

但是,当我执行查询时,它会导致为每个表返回每个结果的多个实例。如果我只选择一条记录,输出就可以了。似乎查询在每个表中运行了多次,并且所有结果都被连接在一起。

    SELECT id, 
GROUP_CONCAT(tb1.table1) AS tbl1,
GROUP_CONCAT(tb2.table2) AS tbl2,
GROUP_CONCAT(tb3.table3) AS tbl3,
GROUP_CONCAT(tb4.table4) AS tbl4,
GROUP_CONCAT(tb5.table5 )AS tbl5
FROM table t
LEFT OUTER JOIN (
SELECT id, field2
FROM table1
GROUP BY id
) tb1
ON tb1.id = t.id
LEFT OUTER JOIN (
SELECT id, field2
FROM table2
GROUP BY id
) tb2
ON tb2.id = t.id
LEFT OUTER JOIN (
SELECT id, field2
FROM table3
GROUP BY id
) tb3
ON tb3.id = t.id
LEFT OUTER JOIN (
SELECT id, field2
FROM table4
GROUP BY id
) tb4
ON tb4.id = t.id
LEFT OUTER JOIN (
SELECT id, field2
FROM table5
GROUP BY id
) tb5
ON tb5.id = t.id
GROUP BY t.id

我期望/希望结果是这样的。

Primary Key | Field 1 | Field 2 | Field 3 | Field 4 | Field 5
1 | 1, 2 | 2, 3 | 2, 4 | 1, 5 | NUll

但是返回的结果是,这只是不指定记录id时1行的例子,但是所有的行都是这样。

Primary Key | Field 1 | Field 2 | Field 3 | Field 4 | Field 5
1 | 1,2 | 2,3, | 2,4 | 1,5, | NUll
2 | 1,2,1, | 2,3,2, | 2,4,2, | 1,5,1, | 1
2 | 1,2,1,2 | 2,3,2,3 | 2,4,2,4 | 1,5,1,5 | 1, 2

我不知道查询在何处或为何多次遍历自身然后遍历每个表。

任何帮助将不胜感激。

问候,

编辑:我已经更新了我最初想要的结果,并添加了更多行来恢复表格。

还包括一个 4 表模式: CREATE TABLE IF NOT EXISTS ( id int(11) NOT NULL AUTO_INCREMENT, 名称 varchar(255) 默认 NULL, 主键(id) );

CREATE TABLE IF NOT EXISTS `table2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`table1id` int(11) NOT NULL,
`Name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX (`table1id`)
);

CREATE TABLE IF NOT EXISTS `table3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`table1id` int(11) NOT NULL,
`Name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX (`table1id`)
);

CREATE TABLE IF NOT EXISTS `table4` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`table1id` int(11) NOT NULL,
`Name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX (`table1id`)
);

INSERT INTO `table`(`id`, `Name`) VALUES (1, 'Test'),(2, 'Second Test'),(3,'Third Test'),(4, 'Test Four'),(5,'Test Five');
INSERT INTO `table2` (`id`,`table1id`, `Name`) VALUES (1,1,'Test Value'), (2,2, 'Test Value 2'), (3,3, 'Test Value 3');
INSERT INTO `table3` (`id`,`table1id`, `Name`) VALUES (1,2,'Value'), (2,3, 'Value 2'), (3,4, 'Value 3');
INSERT INTO `table4` (`id`,`table1id`, `Name`) VALUES (1,1,'Test'), (2,2, 'Test 2'), (3,5, 'Test 3');

最佳答案

GROUP_CONCAT() 中的所有列使用 DISTINCT

试试这个:

SELECT t.id, 
GROUP_CONCAT(DISTINCT tb1.field2) AS tbl1,
GROUP_CONCAT(DISTINCT tb2.field2) AS tbl2,
GROUP_CONCAT(DISTINCT tb3.field2) AS tbl3,
GROUP_CONCAT(DISTINCT tb4.field2) AS tbl4,
GROUP_CONCAT(DISTINCT tb5.field2) AS tbl5
FROM TABLE t
LEFT OUTER JOIN table1 tb1 ON tb1.id = t.id
LEFT OUTER JOIN table2 tb2 ON tb2.id = t.id
LEFT OUTER JOIN table3 tb3 ON tb3.id = t.id
LEFT OUTER JOIN table4 tb4 ON tb4.id = t.id
LEFT OUTER JOIN table5 tb5 ON tb5.id = t.id
GROUP BY t.id

关于MySQL group_concat 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20972037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com