1
我有一個數據庫中的兩個表,一個列表包和一個列出了相關:查找軟件包的依賴
packages
id | name
---------
0 | xorg
1 | gnome-session
2 | gnome-panel
3 | gnome-mixer-applet
4 | gnome-media
depends
package | depends
-----------------
1 | 0
2 | 1
3 | 2
4 | 2
很顯然,如果我想找出一個包要看,我可以這樣做:
SELECT *
FROM packages
INNER JOIN depends
ON packages.id = depends.package
WHERE packages.id = @somenumber
問題是,這隻給了我一個級別的依賴(4取決於2,但它也取決於包1和0)。有沒有辦法在沒有在循環中運行類似的SELECT
的情況下獲得所有的依賴關係?我寧願它在SQLite中工作,但如果需要的話,我會使用一個不同的數據庫(只要它在Linux上是免費的和可用的)。
非常有趣。我將不得不嘗試你的演示文稿中的一些模式。 – 2010-07-02 19:06:52
我還在我的新書* SQL Antipatterns *中介紹了樹型數據和許多其他主題:http://www.pragprog.com/titles/bksqla/sql-antipatterns – 2010-07-02 20:03:22