0

列 (M_Id、Name、Version、Descr) を持つ Modules というテーブルがあります。各モジュールの依存関係を詳述する別のテーブルがあります。つまり、モジュールは別のモジュールに依存している場合があります。このために、複合キー (M_Id_1, Depends) を持つ Mod_depends というテーブルを使用します。エントリの例:

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

特定の ID に対して、依存関係を表す Modules テーブルからエントリを返すことができる MySQL クエリを探しています。上記の例で Id = 1 を指定すると、以下が返されます。

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

これには、結合またはサブクエリ マジック、あるいはその両方が必要ですか?

Modules テーブルにエントリが存在する場合にのみ Mod_depends テーブルへの追加が可能になるように、制約を追加する方法はありますか?

乾杯

乾杯

4

2 に答える 2

0

フィールドの名前を教えてくれなかったので、うまく説明できるようにいくつか作ってみました。基本的に、モジュール テーブルの ID と mod_depends テーブルの依存関係 ID (右の列) を結合し、次のように mod_depends テーブルのモジュール ID (左の列) を使用して検索します。

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;
于 2012-08-28T15:51:24.743 に答える
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;

...しかし、ツリーのような構造のクエリになるため、より深い依存関係を見つけることは本当に簡単な作業ではありません。したがって、この議論をアイデアとして使用するか、DB を Adjacency List から Closure Table に再編成することができます。おそらく、この素晴らしい答えも確認したいでしょう。)

于 2012-08-28T15:54:31.690 に答える