2015-06-17 54 views
0

我陷入了一個棘手的問題,我無法解決自己。 這是我想要實現的。SQL如何在同一張表上使用多個連接

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

如果你更好地解釋你的表實際上意味着什麼,你正在努力實現它可能的幫助。例如,我不清楚你如何從antwoorden表中將id = 1的4行合併到所需的結果表中。你打算在這個過程中執行什麼邏輯?坦率地說,如果你的模式對於你如何處理這些數據是有意義的,那麼它並不是非常清楚。 –

+0

如果您可以創建[SQL小提琴](http://sqlfiddle.com/) –

+0

因爲您的WHERE子句WHERE t1.BT = 1 AND t1.VL = 1,您將永遠不會獲得ID 3或4,因爲你的表中沒有記錄,其ID爲3和4的BT和VL爲1。你必須重新思考你的方法。我不明白你爲什麼沒有得到1的ID。這應該通過,因爲你對其他事情都很熟悉。 – JNevill

回答

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;