2012-07-03 7 views
1

나는이SQL 쿼리는 1/0을 보여주는 사용자 지정 열이 표 1과 표 2에서 일치하는 레코드를 얻을 수

  • AlbumCategories 같은 다국어 사진 갤리에
  • ALBUMNAME
  • 사진과 관련된 여러 테이블 두 테이블
  • PhotoDetails

샘플 테이블 구조. 실제로 표시됩니다 사용자 정의 컬럼과 함께 특정 AlbumID에 대한 Photos 표에서 나에게 모든 기록의 목록이 표시됩니다 결과 세트를 원하는 TRUE 또는 특정 PHOTOID이 PhotoDetails

Table: Photos 
    PhotoID PhotoFile AlbumID 
    1  Photo1.jpg 7 
    2  Photo2.jpg 7 
    3  Photo3.jpg 5 
    4  Photo4.jpg 5 
    5  Photo5.jpg 7 
    6  Photo6.jpg 7 


Table: PhotoDetails 
PDID  PhotoID  PDTitle  AlbumID  LanguageID 
11  1  Photo 1  7  1 
22  2  Photo 2  7  1 
33  3  Photo 3  5  1 
44  4  Photo 4  5  1 


    DESIRED OUT PUT 
    PhotoID PDTitle  AlbumID  DetailPresent 
    1  Photo1  7  TRUE 
    2  Photo2  7  TRUE 
    5  Photo5  7  FALSE 
    6  Photo6  7  FALSE 

I에있는 경우에 기반 FALSE 시도 뭔가 여러 가지를 기반으로 쿼리를 가입하지만 원하는 결과

SELECT pd.PhotoTitle, p.PhotoTN,p.PhotoCreatedOn, pd.AlbumID, ISNULL(p.PhotoID,NULL) AS Missing FROM AlbumPhotos p 
    JOIN AlbumPhotoDetails pd 
    ON p.PhotoID = pd.PhotoID WHERE pd.AlbumID = 16 

이 쿼리 나에게 동일한 결과를 제공을 가져올 수 없습니다

SELECT pd.PhotoTitle, p.PhotoTN,p.PhotoCreatedOn, pd.AlbumID, ISNULL(p.PhotoID,NULL) AS Missing FROM AlbumPhotos p 
    JOIN AlbumPhotoDetails pd 
    ON p.PhotoID = pd.PhotoID WHERE pd.AlbumID = 16 
    OR p.PhotoID IN (SELECT PhotoID FROM AlbumPhotoDetails WHERE LanguageID = 1 AND AlbumID = 16) 

위의 쿼리는 PhotoID을 기반으로 매칭 결과를 얻습니다. 나는 위의 샘플 'DESUTED OUT PUT`에서 보듯이 실제로 원하는 결과를 얻을 수있는 방법을 잃었습니다.

답변

1

왼쪽 외부 조인을 사용하십시오.

사용자가 표시 한 테이블 예제는 연결할 필드가없고 결과에 원하는 값이 예제 데이터에 존재하지 않으므로 의미가 없습니다. 이 (당신이 보여 쿼리에서 사용하는 AlbumPhotoDetails 테이블에 같은) PhotoDetails 테이블의 PhotoId 필드, 그리고 PhotoDetails 표는 결과에서 원하는 타이틀을 포함, 당신이 할 수 있다고 가정

이 같은 다음 PhotoDetails 테이블에 해당 기록이없는 경우 제목이 null이 될 것

select 
    p.PhotoId, d.PDTitle, p.AlbumId, 
    case when d.PhotoId is null then 'FALSE' else 'TRUE' end 
from Photos p 
left join PhotoDetails d on d.PhotoId = p.PhotoId 
where p.AlbumId = 7 

참고.

+0

PhotoDetails 테이블에 PhotoID를 추가하지 않으 셨습니다. 지금 추가하겠습니다. – Learning

+0

고마워!. 너는 맞다. 지금 나를 위해 일하고있다. – Learning