2014-12-31 2 views
1

dbo.mail_Messages 테이블의 결과를 표시해야하지만, 문제는 dbo.mail_Reply에없는 Messages이 표시되어야한다는 것입니다. 그 때문에 아래 쿼리를 사용하고 있지만 아무것도 표시하지 않습니다.테이블이 SQL Server 2008에서 올바르게 결합되지 않았습니다.

enter image description here

가 어떻게이 문제를 해결할 수 있습니다

또한 스크린 샷을 첨부?

내 코드 :이 두 가지 모순되는 조건을 가지고로

SELECT 
    dbo.mail_Messages.MessageID, 
    dbo.mail_Users_Messages_Mapped.PlaceHolderID, 
    IsRead, 
    SenderId, 
    dbo.mail_Messages.Subject, 
    dbo.mail_Messages.Body, 
    dbo.mail_Messages.Date,UserEmail 
FROM 
    dbo.mail_Users_Messages_Mapped 
JOIN 
    dbo.mail_Messages ON dbo.mail_Messages.MessageID = dbo.mail_Users_Messages_Mapped.MessageID 
JOIN 
    dbo.mail_Users ON dbo.mail_Users.UserID = dbo.mail_Users_Messages_Mapped.UserId 
JOIN 
    dbo.mail_Reply ON dbo.mail_Reply.MessageID = dbo.mail_Messages.MessageID 
WHERE 
    UserEmail = 'user1' 
    AND dbo.mail_Users_Messages_Mapped.PlaceHolderId = 1 
    AND dbo.mail_Messages.MessageID != dbo.mail_Reply.MessageID 
+0

'mail_reply'이 mail_users''에 조건부 가입하지, 그래서 당신은 일단 'mail_reply' 테이블을 추가하면 일종의 데카르트 참여를 얻게됩니다. –

+0

예제 쿼리를 보여 주시겠습니까? 제발, 당신이 말하려고하는 것을 얻지 못하고 있기 때문에 ... – Learner

+0

이 예제를보고 조인 조건에주의하십시오 : http://sqlfiddle.com/#!2/db40c/2 –

답변

1

조회에 빈 결과를 생성합니다. join 절에서는 그 요구 :

dbo.mail_Reply.MessageID = dbo.mail_Messages.MessageID 

그리고 값이 동일한 다른 값이 두 조건의 조합과 동일 둘 수 없습니다 때문에 where 절에 해당

dbo.mail_Messages.MessageID != dbo.mail_Reply.MessageID 

을 요구

빈 결과입니다. 내가 제대로 요구 사항을 이해한다면이 문제를 해결하기 위해

한 가지 방법은, 대신 in 연산자를 mail_Reply을 보내고 join을 중지하고 사용하는 것입니다

SELECT 
dbo.mail_Messages.MessageID, 
dbo.mail_Users_Messages_Mapped.PlaceHolderID, 
IsRead, 
SenderId, 
dbo.mail_Messages.Subject, 
dbo.mail_Messages.Body, 
dbo.mail_Messages.Date,UserEmail 
FROM 
dbo.mail_Users_Messages_Mapped 
join 
dbo.mail_Messages on dbo.mail_Messages.MessageID = dbo.mail_Users_Messages_Mapped.MessageID 
join 
dbo.mail_Users on dbo.mail_Users.UserID = dbo.mail_Users_Messages_Mapped.UserId 
where 
UserEmail = 'user1' 
and 
dbo.mail_Users_Messages_Mapped.PlaceHolderId = 1 
and 
dbo.mail_Messages.MessageID NOT IN (SELECT MessageID FROM dbo.mail_Reply) 
관련 문제