2012-08-28 2 views
0

열이있는 모듈 (M_Id, Name, Version, Descr)이라는 테이블이 있습니다. 각 모듈에 대한 종속성을 자세히 설명하는 다른 테이블이 있습니다. 즉 모듈이 다른 모듈에 종속적 일 수 있습니다. 이것을 위해 나는 복합 키 (M_Id_1, Depends)를 갖는 Mod_depends라는 테이블을 사용한다. 예 항목 : 나는 지정된 ID에 대한 종속성을 나타내는 모듈 테이블에서 항목을 반환 할 수 있습니다, MySQL의 쿼리를 찾고 있어요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 

. 위의 예제에서 Id = 1을 제공하면 다음을 반환합니다.

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

이 작업에는 조인 또는 일부 하위 쿼리 마법이 필요합니까?

모듈 테이블에 항목이있을 때만 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을 사용하거나 DB를 Adjacency List에서 Closure Table로 재구성 할 수 있습니다. 아마도 this wonderful answer도 확인하고 싶을 것입니다.)

0

글쎄, 당신은 당신의 필드의 이름을 포기하지 않았다, 그래서 난 그냥 그 희망 설명 할 몇 가지를했다. 기본적으로 당신이 TEH 모듈 테이블과 mod_depends 테이블의 종속성 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;