2012-07-07 41 views
1

我有2張桌子。如何多連接表?

工人和經驗

在表的工人有一行worker_parent(因爲一個工人可以負責其他)。

不,我必須連接的表像:

SELECT w1.* FROM workers w1 LEFT JOIN workers w2 ON (w2.id = w1.worker_parent) 

這是很正常的。但是我必須以w2的經驗排序,我嘗試添加表體驗,但是它連接到w1而不是w2。

我的問題是如何將表體驗(其中有行worker_id)添加到w2中,並通過經驗和從w1中選擇數據進行排序。

這是我的嘗試。

SELECT w1.* FROM workers w1 LEFT JOIN workers w2 ON (w2.id = w1.worker_parent) LEFT JOIN experience e ON (w2.id = e.worker_id) ORDER BY e.experience DESC 

感謝對幫助

+0

和什麼是錯絲毫查詢?它的排序工作者由父母經驗豐富,如果他們有父母 – 2012-07-07 08:17:06

+1

雖然你沒有顯示任何來自'W2'和'experience'表的數據,你的SQL似乎是非常正確的。這意味着,如果'W2'中的'W1'有多行並且'experience'中的'W2'類似,那麼您的輸出中'W1'中的每行都將有多行。要了解除了'W1'列以外,還需要顯示'W2'和'Experience'的一些列。 – somnath 2012-07-07 08:22:44

+0

@somnath - 我只需要w1的數據。 – CroiOS 2012-07-07 08:25:25

回答

1

如果只想有一個父與經驗將童工, 你需要添加一個地方(或更改連接類型) (爲便於閱讀,我改名W1和W2 w_child和w_parent)

SELECT w_child.*, e_parent.experience 
FROM workers AS w_child 
LEFT JOIN workers AS w_parent ON (w_parent.id = w_child.worker_parent) 
LEFT JOIN experience AS e_parent ON (w_parent.id = e_parent.worker_id) 
WHERE e_parent.worker_id IS NOT NULL 
ORDER BY e_parent.experience DESC 
+0

就是這樣,tnx。 – CroiOS 2012-07-07 08:48:52