2010-01-25 2 views
0

두 개의 테이블이 있습니다. 하나는 기사와 다른 구조입니다. 그리고 기사는 자식 노드가있는 트리로 볼 수 있습니다. Windows Forms 컨트롤처럼 TreeView."트리"에 모두 5 개의 행을 선택하십시오.

  • article_id를
  • article_above_id

조 :

  • article_id를
  • article_number
  • 는 구조 테이블은 기본적으로이 보인다

나는 최대 5 개의 기사 중에서 선택하고 싶습니다. 이 나무 아래에이 기사가있는 기사를 보여줍니다.

article_number-data는 적어도 하나가 필요한 GUI에서 가져오고 아무것도 입력하지 않으면 null이됩니다.

+0

재귀 쿼리와 같은 냄새가납니다. 출발점/질문으로 가져 가서 질문을 다시 작성하십시오. 나는 스키마 설명 후에 정말로 잃어 버렸다. – Leonidas

답변

0

5 개의 기사를 선택하고 상위 기사에 가입하고 상위 기사를 그룹화하고 5 개의 하위 기사와 일치하는 기사 만 얻을 수 있습니다.

select p.article_id 
from Article a 
inner join Structure s on s.article_above_id = article_id 
inner join Article p on p.article_id = s.article_id 
where a.article_number in (3,7,45,186,203) 
group by p.article_id 
having count(*) = 5 

(참고 :. 당신이 거꾸로 트리를 켠 경우 하위 항목의 ID, 즉 트리에서 위의 의미와 아래 매달려 잎을 가지고 구조 테이블의 "위"필드를 사용 루트를 사용하면 필드의 사용을 전환해야합니다.)

+0

이것은 사용자가 4 개의 기사 번호 만 입력하는 것을 고려하지 않거나? articlenumbers 문자열 btw. – Erik

+0

@Erik : 예, in()의 콘텐츠와 개수를 비교하려면 숫자를 변경해야합니다. 최선의 방법은 물론 쿼리 실행 방법에 달려 있습니다. in()에서 숫자 대신 문자열을 사용하는 것은 문제가되지 않습니다. – Guffa

+0

고마워요! 카운트 값에 대한 사례를 사용하여 작동하도록했습니다. – Erik

관련 문제