Детали таблицы:
CREATE TABLE `table1` (
`user` VARCHAR(50) NULL DEFAULT NULL,
`id` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
;
INSERT INTO `table1` (`user`, `id`) VALUES ('bob', '1');
INSERT INTO `table1` (`user`, `id`) VALUES ('bob', '2');
INSERT INTO `table1` (`user`, `id`) VALUES ('kev', '3');
INSERT INTO `table1` (`user`, `id`) VALUES ('kev', '4');
CREATE TABLE `table2` (
`id` VARCHAR(50) NULL DEFAULT NULL,
`data1` VARCHAR(50) NULL DEFAULT NULL,
`data2` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
;
INSERT INTO `table2` (`id`, `data1`, `data2`) VALUES ('1', 'a', 'a1');
INSERT INTO `table2` (`id`, `data1`, `data2`) VALUES ('1', 'b', 'b1');
INSERT INTO `table2` (`id`, `data1`, `data2`) VALUES ('1', 'b', 'c1');
INSERT INTO `table2` (`id`, `data1`, `data2`) VALUES ('2', 'a', 'd1');
INSERT INTO `table2` (`id`, `data1`, `data2`) VALUES ('2', 'b', 'e1');
INSERT INTO `table2` (`id`, `data1`, `data2`) VALUES ('3', 'g', 'f1');
CREATE TABLE `table3` (
`id` VARCHAR(50) NULL DEFAULT NULL,
`data11` VARCHAR(50) NULL DEFAULT NULL,
`data22` VARCHAR(50) NULL DEFAULT NULL
)
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
;
INSERT INTO `table3` (`id`, `data11`, `data22`) VALUES ('1', 'a10', 'a11');
INSERT INTO `table3` (`id`, `data11`, `data22`) VALUES ('1', 'b10', 'b11');
INSERT INTO `table3` (`id`, `data11`, `data22`) VALUES ('1', 'c10', 'c11');
INSERT INTO `table3` (`id`, `data11`, `data22`) VALUES ('2', 'd10', 'd11');
INSERT INTO `table3` (`id`, `data11`, `data22`) VALUES ('2', 'e10', 'e11');
INSERT INTO `table3` (`id`, `data11`, `data22`) VALUES ('3', 'f10', 'f11');
Мой проверенный запрос:
select
t1.user,
t1.id,
group_concat(t2.data1 ) d1,
group_concat( t2.data2) d2,
group_concat( t3.data11 ) d11,
group_concat(t3.data22 ) d22
from table1 t1
left join table2 t2
on t2.id = t1.id
left join table3 t3
on t3.id = t1.id
where t1.user='bob' group by t1.id;
но я получаю несколько данных в d1, d2, d11, d22 и из-за второго левого соединения
Ожидаемый результат:
+-------+------+------------+-----------+---------------+---------------+
| user | id | d1 | d2 | d11 | d22 |
+-------+------+------------+-----------+---------------+---------------+
| bob | 1 | a,b,b | a1,b1,c1 | a10,b10,c10 | a11,b11,c11 |
| bob | 2 | a,b | d1,e1 | d10,e10 | d11,e11 |
+-------+------+------------+-----------+---------------+---------------+
На самом деле я храню данные массива из API в MySQL, используя jdbc. Я вставил данные в три таблицы, теперь мне нужно извлечь эти данные, сформировать формат массива и отправить его в веб-API, так что кто-нибудь здесь знает, как это сделать? Нужно ли делать вложенный запрос?
спасибо @agtabesh Я делаю больше успехов в правильном формате вопросов, это ясно
См. GROUP_CONCAT - хотя я бы обрабатывал такие вещи в коде приложения.
Как указано выше, серьезно рассмотрите возможность решения проблем с отображением данных в коде приложения.






SELECT t1.id
, GROUP_CONCAT(t2.data ORDER BY t2.data) x
FROM Table1 t1
LEFT
JOIN Table2 t2
ON t2.id = t1.id
GROUP
BY t1.id;
+----+----------+
| id | x |
+----+----------+
| 15 | A1,B1,C1 |
| 16 | H |
| 17 | NULL |
+----+----------+
Спасибо Strawberry, на самом деле он работает с двумя только что найденными таблицами, если я добавлю еще одну левую, как показано в моем коде приложения, значение таблицы x a1,b1,c1,a1,b1,c1 возвращается два раза, как это, я загружу ошибку в новый.
Круто - помните, что когда участники начнут замечать ваши результаты голосования, они могут не захотеть помочь в будущем.
SELECT t1.user,
t1.id,
t2.d1,
t2.d2,
t3.d11,
t3.d22
FROM table1 t1
LEFT JOIN (SELECT t2.id,
group_concat(t2.data1) d1,
group_concat(t2.data2) d2
FROM table2 t2
GROUP BY t2.id) t2
ON t2.id = t1.id
LEFT JOIN (SELECT t3.id,
group_concat(t3.data11) d11,
group_concat(t3.data22) d22
FROM table3 t3
GROUP BY t3.id) t3
ON t3.id = t1.id
WHERE t1.user = 'bob';
Пожалуйста, добавьте усилия, которые вы приложили для достижения желаемого, поделитесь своим исходным кодом.