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

что дает мне следующий результат (каждый столбец берется из различной таблицы): enter image description here

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

Хотелось бы получить результат, подобный следующему: enter image description here

Моя конечная цель: обработать полученный массив и преобразовать его в 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

Вернуться на верх