/ / SQL як використовувати кілька об'єднань в одній таблиці - mysql, sql, join

SQL як використовувати декілька об'єднань на одному столі - mysql, sql, join

Я застряг у хитромудрий питання, яке я не в змозі вирішити сам. Це я намагаюся досягти.

Бажаний вихід

Це навіть можливо? Я вже спробував наступний запит, але не отримую те, що хочу.

SELECT t1.ID, info.start_bt1, info.start_bt2, t1.ANT as BT1_VL1, t2.ANT as BT1_VL2, t3.ANT as BT2_VL1, t4.ANT as BT2_VL2
FROM antwoorden t1
LEFT JOIN info ON t1.ID = info.ID

LEFT JOIN antwoorden t2
ON t1.ID = t2.ID
AND t2.BT = 1 AND t2.VL = 2

LEFT JOIN antwoorden t3
ON t1.ID = t3.ID
AND t3.BT = 2 AND t3.VL = 1

LEFT JOIN antwoorden t4
ON t1.ID = t4.ID
AND t4.BT = 2 AND t4.VL = 2

WHERE t1.BT = 1 AND t1.VL = 1

Проблема полягає в тому, що я отримую лише рядок з ідентифікатором 2 (з бажаного результату). Хтось знає, чому я отримую лише рядок з ідентифікатором 2, а не всі 4?


Редагувати

Я оновив картинку, щоб було трохи зрозуміліше, щоЯ маю на увазі. Також ідентифікатор - це ідентифікатор, який надається людині. Як ви бачите на малюнку, це означає, що одна людина може мати кілька рядів. Що я намагаюся зробити - це згрупувати всі дані, зібрані від людини за їх ідентифікаційною карткою. Я знаю, що цей спосіб не є гарним способом зберігання даних, але я не можу допомогти, оскільки це зробив хтось інший, і я можу "не змінювати це.


Ще одна редакція: ось загадка sql

Відповіді:

1 для відповіді № 1

Спробуйте це навпаки. Почніть з info стіл і потім LEFT JOIN кілька разів до antwoorden:

select i.id,i.start_bt1,i.start_bt2,
a1.ant as "bt1_vl1",
a2.ant as "bt1_vl2",
a3.ant as "bt2_vl1",
a4.ant as "bt2_vl2"
from info i
left join antwoorden a1 on a1.id = i.id and a1.vl=1 and a1.bt=1
left join antwoorden a2 on a2.id = i.id and a2.vl=2 and a2.bt=1
left join antwoorden a3 on a3.id = i.id and a3.vl=1 and a3.bt=2
left join antwoorden a4 on a4.id = i.id and a4.vl=2 and a4.bt=2;