2012-02-17 2 views
1
| postid | ref_postid | title | 
| 1  | 0   | Title 1 | 
| 2  | 1   |   | 
| 3  | 1   |   | 
| 4  | 0   | Title 2 | 
| 5  | 4   |   | 

토론 포럼 용 테이블입니다. ref_postid = 0이면 메인 포스트라는 의미입니다. ref_postid가 0이 아니라면 대답이고 postid에 대한 참조입니다 (위의 표 참조). (주 게시물에만 제목이 있습니다.)SQL이있는 동일한 테이블의 두 행 중에서 선택

테이블의 모든 행을 선택하고 싶지만 문제는 답을 참조하는 토론의 제목을 표시하고 싶다는 것입니다.

사례 : postid = 2 인 행을 원한다고 가정 해 보겠습니다. 또한 토론의 이름 인 "제목 1"을 얻고 싶습니다.

나는 CASE로 해봤지만 오류가 발생했습니다. 나는 이것에별로 좋지 않다. 하나의 쿼리로 처리 할 수 ​​있습니까? 아니면 두 개의 쿼리를 사용해야합니까?

도움 주셔서 감사합니다.

+0

이 문제는 데이터베이스 테이블을 다시 디자인하면 해결 될 수 있습니다. 그러면 쿼리가 발생하지 않습니다. 그것이 가능하지 않다면 테이블을 시작점으로 삼는 것을 고려하십시오. – Widor

+0

테이블을 어떻게 디자인해야합니까? 두 테이블 모두 동일한 속성을 가지고 있기 때문에 동일한 테이블에 답변과 질문을 유지하는 것이 좋습니다. –

+0

개인적으로, 나는 질문과 대답 사이에 부모 - 자녀 1 - 많은 관계를 보았습니다. 나는'question'을위한'title' 필드를위한 테이블과'postid'와'title' 필드에 대한 FK를 가진'Answers'를위한 테이블을 가질 것입니다. – Widor

답변

1
select ifnull(q.title, a.title) title, ... (other columns) 
from posts a 
left join posts q on a.ref_postid <> 0 and a.ref_postid = q.postid 
관련 문제