2015-11-25 36 views
0

比方說,我有3個表:MySQl中的多級別查詢 - 是否需要額外的外鍵?

  • 部門,各自有0到n
    • 工作,各自有0到n

給在一個部門,我如何獲得在該部門工作的所有人員?我可以用一個SELECT做到嗎?

我設置了a fiddle與一些示例數據,但我無法制定正確的查詢。

它可以做一些JOIN魔術?或者我需要在peeps表中添加一個外鍵,指向department_id

+0

你加入了工作崗位和部門職位。 –

回答

1

一個簡單連接

SELECT people.* 
FROM departments 
INNER JOIN jobs ON departments.deperatment_id = jobs.deperatment_id 
INNER JOIN people ON jobs.job_id = people.job_id 
WHERE departments.deperatment_id = 1 

您將需要修改的加盟條件,在你的表所使用的那些列名。

請注意,您的SQL小提琴示例表沒有任何索引。添加這些對於性能非常重要。

+0

謝謝!工作小提琴在http://sqlfiddle.com/#!9/d64f1/1 – Mawg

+0

順便說一句,你會執行它與該查詢,或額外的FK?如果一個人改變了部門,額外的FK將需要更新,毫無疑問,使用簡單的'SELECT * FROM peeps WHERE peeps.department_id = X',執行時間會更快。這可能取決於表格有多少行,I猜測。 – Mawg

+1

外鍵實際上只是與另一個表相關的索引。你所建議的是複製在某些時候不可避免會出現不同步的數據。通過像索引很好的簡單查詢,性能應該非常好。 – Kickstart