SQL如何在同一个表上使用多个连接

时间:2015-06-17 15:56:11

标签: mysql sql join

我遇到了一个棘手的问题,我无法解决自己。 这就是我想要实现的目标。

The desired output

这甚至可能吗? 我已经尝试了以下查询,但我没有得到我想要的内容。

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

问题是我只得到ID为2的行(来自所需的结果)。有谁知道我为什么只获得ID为2的行而不是全部4行?

修改

我更新了图片,所以我的意思更清楚一点。此外,ID是给予人的ID。正如您在图片中看到的,这意味着一个人可以拥有多行。我想要做的是根据他们的ID对从一个人收集的所有数据进行分组。我知道这种方式不是存储数据的好方法,但我无法帮助它,因为其他人做了这个,我无法改变它。

另一个编辑:这里是a sql fiddle

1 个答案:

答案 0 :(得分: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;