0

メンバーとその写真を取得したい。写真は各メンバー2枚ずつ。(プロフィール画像の話ではありません)

Member と MemberPhotos という名前の 2 つのテーブルがあります。

これが機能しない私のクエリです(予想通り):

SELECT
M.Name as MemberName,
M.LastName as MemberLastName,

(
    SELECT
        TOP 1
        MP.PhotoName
    FROM
        MemberPhotos MP
    WHERE
        MP.MemberID = M.ID
        AND
        MP.IsFirst = 1
) as MemberFirstPhoto,

(
    SELECT
        TOP 1
        MP.PhotoName
    FROM
        MemberPhotos MP
    WHERE
        MP.MemberID = M.ID
        AND
        MP.IsFirst = 0
) as MemberSecondPhoto,

FROM
    Members M

代わりに内部結合を使用する必要があると誰かが言うかもしれませんが、内部結合は使用したくありません。使用すると、次のように複数のデータが得られます。

Name       Surname       PhotoName

Bill       Gates         bill.png
Bill       Gates         bill2.png
Steve      Jobs          steve.jpg
Steve      Jobs          steve2.jpg

クエリについて何をお勧めしますか?

ありがとう。

編集: ここに私が取得したい出力があります:

Name       Surname       FirstPhoto       SecondPhoto

Bill       Gates         bill.png         bill2.png
Steve      Jobs          steve.jpg        steve2.png
4

1 に答える 1

1

サンプルクエリの唯一の問題は、後に余分なコンマがあることです

as MemberSecondPhoto

これを削除すると正常に動作します。

demo を使用した SQL Fiddle

ただし、そのクエリは現在機能していますが、各メンバーには 2 枚の写真しかないことがわかっているため、より単純なクエリを使用できます。

SELECT
  M.Name as MemberName,
  M.LastName as MemberLastName,
  MPF.PhotoName as MemberFirstPhoto,
  MPS.PhotoName as MemberSecondPhoto
FROM Members M
  LEFT JOIN MemberPhotos MPF ON M.ID = MPF.MemberID AND MPF.IsFirst = 1
  LEFT JOIN MemberPhotos MPS ON M.ID = MPS.MemberID AND MPS.IsFirst = 0

demo を使用した SQL Fiddle

于 2013-03-23T12:00:44.447 に答える