1

多言語フォトギャラリーに関連するテーブルがいくつかあります

  • アルバムカテゴリー
  • アルバム名
  • 写真
  • 写真詳細

2 つのテーブルのサンプル テーブル構造。実際には、特定の PhotoID がテーブルに存在するかどうかを示す、またはそれに基づくカスタム列とともに、Photos特定のテーブルからのすべてのレコードのリストを表示する結果セットが必要ですAlbumIDTRUEFALSEPhotoDetails

   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

いくつかの JOIN ベースのクエリを試しましたが、目的の結果を得ることができませんでした

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。上記のサンプル「DESIRED OUT PUT」に示されているように、実際に望ましい結果を達成する方法がわかりません。

4

1 に答える 1

1

左外部結合を使用します。

あなたが示したテーブルの例は、それらを接続するフィールドがなくPDTitle、結果に必要な値がサンプルデータに存在しないため、意味がありません。

PhotoIdテーブルにフィールドがあり (表示するクエリで使用するテーブルPhotoDetailsのように)、テーブルに結果に必要なタイトルが含まれていると仮定すると、次のようにすることができます。AlbumPhotoDetailsPhotoDetails

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

PhotoDetailsテーブルに対応するレコードがない場合、タイトルは null になることに注意してください。

于 2012-07-03T05:54:45.850 に答える