0

我想获得会员和他们的照片。每个成员都有 2 张照片。(我不是在谈论个人资料图片)

有 2 个名为 Members 和 MemberPhotos 的表。

这是我的查询不起作用(预期):

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

如果你删除它,它工作正常。

SQL Fiddle 与演示

但是,虽然该查询现在正在运行,因为您知道每个成员只有两张照片,您可以使用更简单的查询:

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

SQL Fiddle 与演示

于 2013-03-23T12:00:44.447 回答