У меня есть несколько таблиц, с которыми мне нужно объединить группу результатов. Всего 6 таблиц с индексом в каждом совпадении primary_key в исходной таблице.Проблемы с MySQL group_concat
Однако, когда я выполняю свой запрос, это приводит к появлению нескольких экземпляров каждого результата, возвращаемого для каждой таблицы. Если я выбираю только одну запись, вывод будет прекрасным. Кажется, что запрос выполняется несколько раз за столом, и все результаты объединяются вместе.
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
Но возвращаемые результаты, это только пример 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
Я в недоумении, где и почему запрос итерация себя несколько раз, а затем итерация над каждым столом.
Любая помощь была бы принята с благодарностью.
С уважением,
Edit: Я обновил свои первоначальные желаемые результаты и добавил несколько строк в таблице, как приносится назад.
включены также 4 схемы таблицы: CREATE TABLE IF NOT EXISTS table
( id
INT (11) NOT NULL AUTO_INCREMENT, Name
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');
Давайте представим, что есть только три таблицы, каждая с 2-мя колоннами. Рассмотрите возможность предоставления надлежащих DDL для этого (и/или sqlfiddle) ВМЕСТЕ С ЖЕСТКОЙ РЕЗУЛЬТАТОМ. – Strawberry