2012-08-28 83 views
0

我有一個名爲Modules with columns(M_Id,Name,Version,Descr)的表。我有另一個表詳細說明每個模塊的依賴關係,即一個模塊可能依賴於另一個。爲此,我使用一個名爲Mod_depends的表,它具有組合鍵(M_Id_1,Depends)。 示例條目:MySQL中的複合鍵查詢

Module 
1 | Chameleon | 2.9.2 | HTML/XML template engine 
2 | Unittest2 | 1.0.0 | unittest module 
3 | OrderedDict | 1.0.1 | Ordered dictionary 

Mod_depends 
1 | 2 
1 | 3 

我正在尋找一個MySQL查詢,對於一個給定的ID,可以從較依賴的模塊表中返回條目。在上面的示例中,提供Id = 1將返回:

2 | Unittest2 | 1.0.0 | unittest module 
3 | OrderedDict | 1.0.1 | Ordered dictionary 

這是否需要聯接或某個子查詢魔法或兩者兼而有之?

有沒有一種方法可以添加約束條件,以便只有當條目存在於Modules表中時纔可以添加Mod_depends表?

乾杯

乾杯

+0

是否必須返回第二,第三等順序依賴關係?例如,如果模塊2又依賴於模塊4,那麼應該查詢模塊1是否也返回模塊4作爲它的依賴關係? – raina77ow

回答

0

對於最簡單的情況(一階依賴性只),它是這樣的:

SELECT m.M_id, m.Name, m.Version, m.Descr 
     FROM Module AS m 
INNER JOIN Mod_depends AS md 
     ON m.M_id = md.Depends 
    WHERE md.M_Id_1 = 1; 

...但它會是一個非常不平凡的任務,以找到更多深的依賴,因爲它會成爲樹形查詢像結構。因此,您可以使用this discussion作爲創意,或者將數據庫從鄰接列表重新組織到關閉表。也許你也想檢查this wonderful answer。 )

0

好了,你沒有給你的字段的名稱,所以我只是做了一些應該很有希望解釋。基本上你一起上,在格蘭模塊表和mod_depends表的相關ID(右列)的ID,然後查找使用模塊ID(左列)在mod_depends表是這樣的:

SELECT m.module_id, m.module_name, m.module_version, m.module_description FROM module as m INNER JOIN mod_depends as md on m.module_id = md.module_dependency_id 
WHERE md.module_id = 1;