MySQL: LEFT JOIN без повторения | любая другая идея, чтобы получить этот результат в Python
Весь день я пытаюсь справиться с SQL-запросом:
SELECT t1.id,
t2.name,
t3.pressure,
t4.therapy
FROM tbl_user_details as t1
LEFT JOIN tbl_user_details_2 as t2 ON (t2.id=t1.id)
LEFT JOIN tbl_pressure as t3 ON (t3.id=t1.id)
LEFT JOIN tbl_therapy as t4 ON (t4.id=t1.id)
WHERE t1.id BETWEEN 1 and 9
что дает мне следующий результат (каждый столбец берется из различной таблицы):

Как вы можете видеть, он повторяет поля id, name и последнее pressure для того, чтобы заполнить "пустые места". Я нашел несколько сообщений на эту тему, но ни одно из решений не подошло мне.
Хотелось бы получить результат, подобный следующему:

Моя конечная цель: обработать полученный массив и преобразовать его в csv для экспорта данных.
Я работаю с Django-Python и сначала я пытался организовать CSV программно, начиная с нуля - затем я подумал о том, чтобы попросить mySQL выполнить тяжелую работу. И это удалось, только с этой проблемой.
Для меня было бы здорово также "объединить" горизонтально записи каждой таблицы с одинаковым ID.
Есть идеи, как я могу попытаться решить эту проблему?
Спасибо за вашу будущую помощь.
EDIT 1: Я должен отметить, если это не было ясно, я не являюсь экспертом SQL dev (несколько лет без использования); я изменил первоначальный запрос.
Вы можете использовать GROUP BY и затем GROUP_CONCAT с сепаратором новой строки, который перечисляет все различные значения.
Это не отображается правильно в разметке, но каждый
является новой строкой.
Пожалуйста, посмотрите ссылку DBfiddle ниже.
CREATE TABLE tbl_user_details( id int, name varchar (25)); insert into tbl_user_details values (1,'User 1');
CREATE TABLE tbl_pressure ( id int, pressure varchar(10)); insert into tbl_pressure values (1,'120/80'), (1,'130/90'), (1,'140/95');
CREATE TABLE tbl_therapy( id int,therapy varchar(10)); insert into tbl_therapy values (1,'drug A'), (1,'drug B'), (1,'drug C'), (1,'drug D');
SELECT t1.id, max(t1.name), group_concat(distinct t3.pressure SEPARATOR '\n') pressures, group_concat(distinct t4.therapy SEPARATOR '\n') therapies FROM tbl_user_details as t1 LEFT JOIN tbl_pressure as t3 ON (t1.id=t3.id) LEFT JOIN tbl_therapy as t4 ON (t1.id=t4.id) GROUP BY t1.id
id | max(t1.name) | pressures | therapies -: | :----------- | :------------------------- | :----------------------------------- 1 | User 1 | 120/80<br>130/90<br>140/95 | drug A<br>drug B<br>drug C<br>drug D
db<>fiddle here