0
我陷入了一个棘手的问题,我无法解决自己。 这是我想要实现的。SQL如何在同一张表上使用多个连接
这甚至可能吗? 我尝试过以下查询,但我没有得到我想要的。
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
如果你更好地解释你的表实际上意味着什么,你正在努力实现它可能的帮助。例如,我不清楚你如何从antwoorden表中将id = 1的4行合并到所需的结果表中。你打算在这个过程中执行什么逻辑?坦率地说,如果你的模式对于你如何处理这些数据是有意义的,那么它并不是非常清楚。 –
如果您可以创建[SQL小提琴](http://sqlfiddle.com/) –
因为您的WHERE子句WHERE t1.BT = 1 AND t1.VL = 1,您将永远不会获得ID 3或4,因为你的表中没有记录,其ID为3和4的BT和VL为1。你必须重新思考你的方法。我不明白你为什么没有得到1的ID。这应该通过,因为你对其他事情都很熟悉。 – JNevill