2012-07-09 5 views
0

간단한 검토 웹 사이트 응용 프로그램을 만들고 SQL 쿼리에 대한 도움이 필요합니다.SQL : 부모 - 자식 테이블 조인

3 개의 테이블 (주제, 댓글, 사용자)이 있습니다. 3 개의 테이블 모두에서 데이터를 선택하려면 SQL 쿼리가 필요합니다.

은 '주제'표는 부모와 '댓글'표는 어디 부모 당 제로 100 기록에서 (자식 레코드가 포함되어 있습니다.

세 번째 표는 '사용자'는 모든 사용자에 대한 사용자 정보가 포함되어 있습니다. 여기

는 3 개 테이블의 필드입니다 :

Topics (topicID, strTopic, userID) 
Comments (commentID, topicID, strComment, userID) 
Users (userID, userName) 

내가 시도 :

SELECT * 
FROM Topics 
    Inner Join Comments ON Topics.topicID = Comments.topicID 
    Inner Join Users ON Topics.userID = Users.userID 

그러나 여러 항목이 있고 사용자 정보가 주석 테이블에 조인되지 않았기 때문에이 작업이 올바르게 수행되지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

결과에 주석이없는 주제가 포함되기를 원합니 까? – HABO

+0

성취하려는 것은 무엇입니까? 사용자에 대한 모든 활동을 찾고 싶습니까? 사용자 이름을 포함하여 특정 주제에 대한 모든 의견은 무엇입니까? 또한 변수 이름에 접두사/접미사 열 이름을 사용하는 것은 좋지 않습니다 (그래서'str ... '을 사용하지 마십시오). 또한 여러 가지 이유로 타임 스탬프를 테이블에 첨부하면 도움이 될 수 있습니다. –

+0

결과는 해당 주제 아래에 각 주석이있는 특정 사용자 주제의 목록이어야합니다 (있을 경우). 내 expample의 DB 스키마는 간결하게 단순화되었으며 주제와 주석 모두에 대한 타임 스탬프와 다른 필드가 있습니다. 하나의 레코드 세트를 반복적으로 수행하는 방법을 잘 모르겠습니다. – pray4Mojo

답변

1

모두에 대한 사용자 관련 정보를 얻을 수 있습니다.

SELECT * 
FROM Topics t 
INNER JOIN Users tu on tu.userID = t.userID 
LEFT JOIN Comments c on c.topicID = t.topicID 
LEFT JOIN User cu on cu.userID = c.userID 
+0

설명이없는 경우 쿼리에 토픽 테이블의 일부 데이터가 누락된다는 점을 제외하면 작동합니다. – pray4Mojo

+0

실제로 누락 된 데이터가 아니라 오히려 주석 레코드가있는 경우에도 리턴 된 사용자 ID는 주제 테이블의 사용자 ID입니다. – pray4Mojo

+0

그렇게해서는 안됩니다. 어쩌면 주제 userId와 comment userId가 같기 때문에 같은 것을 두 번 돌려주는 이유입니다. – Satish

0

사용자 테이블에 두 번 참여해야합니다. 당신은 어떤 의견 주제를 얻을 코멘트에 가입하고 또한 주제를 결합하고 사용자와 코멘트 왼쪽 않는해야

SELECT * 
FROM Topics 
INNER JOIN Comments ON Topics.topicID = Comments.topicID 
INNER JOIN Users AS u1 ON Topics.userID = u1.userID 
INNER JOIN Users AS u2 ON Comments.userID = u2.userID