0

我有一个名为 Modules 的表,其中包含列(M_Id、Name、Version、Descr)。我有另一个表详细说明每个模块的依赖关系,即一个模块可能依赖于另一个模块。为此,我使用了一个名为 Mod_depends 的表,它具有复合键 (M_Id_1, 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

我正在寻找一个 MySQL 查询,对于给定的 id,它可以从表示依赖项的 Modules 表中返回条目。在上面的示例中,提供 Id = 1 将返回:

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

这是否需要连接或一些子查询魔术或两者兼而有之?

有没有一种方法可以添加约束,以便仅当模块表中存在条目时才能添加到 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;

...但是找到更深层次的依赖关系将是一项非常重要的任务,因为它将成为对树状结构的查询。因此,您可以使用此讨论来获取想法,也可以将您的数据库从邻接表重组为闭包表。也许您也想检查这个精彩的答案。)

于 2012-08-28T15:54:31.690 回答