MySQL中的复合键查询

时间:2012-08-28 15:45:19

标签: mysql join subquery

我有一个名为Modules with columns(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表?

干杯

干杯

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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作为想法,或者将数据库从Adjacency List重新组织为Closure Table。也许你也想检查this wonderful answer。 )

相关问题