使用 JOIN 获取第一个 table 的所有行和另一个 table 的 1 个匹配行(列)
Get all row from first table and 1 matching row (column) from another table using JOIN
我有两个 table 与相册相关,第一个 table 存储相册名称,第二个 table 存储相册图片,我需要在一个页面上显示所有相册 (albums)和第二页的相关图片 (album-photos)
在第一页我必须显示相册名称和图像,但问题是相册 table(相册)没有任何相册相关图像。所以我想从 table (AlbumImages) 中获取所有与专辑相关的图像。
我在下面的 JOIN 查询中尝试过,它从两个 table 中提取所有匹配记录,而我只想要与相册相关的任何图像,以便我可以在相册页面上显示它
SELECT a.AlbumID,Title,AlbumImageName, Description,AlbumDate,AlbumType FROM Albums a LEFT OUTER JOIN AlbumImages i
ON a.AlbumID = i.AlbumID
WHERE AlbumType = 1
AND a.IsVisible=1 AND a.IsActive=1
ORDER BY AlbumDate DESC
Table结构
专辑(AlbumID、标题、AlbumDate、AlbumType、IsVisible)
AlbumImages(AlbumImageID、AlbumID、AlbumImageName、ImageCaption、ImageOrder、IsVisible)
由于相册 Table 不在相册 [=26= 中存储任何与相册相关的图像,因此我如何简单地显示第一个 table 的详细信息以及与相册页面上的相册相关的任何图像]
您可以将 ROW_NUMBER
与 random/unspecified 排序一起使用,并且只保留每个相册的 "first" 图像记录:
WITH cte AS (
SELECT a.AlbumID, a.Title, i.AlbumImageName, Description, a.AlbumDate, a.AlbumType,
ROW_NUMBER() OVER (PARTITION BY a.AlbumID ORDER BY (SELECT NULL)) rn
FROM Albums a
LEFT JOIN AlbumImages i ON a.AlbumID = i.AlbumID
WHERE AlbumType = 1 AND a.IsVisible = 1 AND a.IsActive = 1
)
SELECT AlbumID, Title, AlbumImageName, Description, AlbumDate, AlbumType
FROM cte
WHERE rn = 1;
我有两个 table 与相册相关,第一个 table 存储相册名称,第二个 table 存储相册图片,我需要在一个页面上显示所有相册 (albums)和第二页的相关图片 (album-photos)
在第一页我必须显示相册名称和图像,但问题是相册 table(相册)没有任何相册相关图像。所以我想从 table (AlbumImages) 中获取所有与专辑相关的图像。
我在下面的 JOIN 查询中尝试过,它从两个 table 中提取所有匹配记录,而我只想要与相册相关的任何图像,以便我可以在相册页面上显示它
SELECT a.AlbumID,Title,AlbumImageName, Description,AlbumDate,AlbumType FROM Albums a LEFT OUTER JOIN AlbumImages i
ON a.AlbumID = i.AlbumID
WHERE AlbumType = 1
AND a.IsVisible=1 AND a.IsActive=1
ORDER BY AlbumDate DESC
Table结构
专辑(AlbumID、标题、AlbumDate、AlbumType、IsVisible) AlbumImages(AlbumImageID、AlbumID、AlbumImageName、ImageCaption、ImageOrder、IsVisible)
由于相册 Table 不在相册 [=26= 中存储任何与相册相关的图像,因此我如何简单地显示第一个 table 的详细信息以及与相册页面上的相册相关的任何图像]
您可以将 ROW_NUMBER
与 random/unspecified 排序一起使用,并且只保留每个相册的 "first" 图像记录:
WITH cte AS (
SELECT a.AlbumID, a.Title, i.AlbumImageName, Description, a.AlbumDate, a.AlbumType,
ROW_NUMBER() OVER (PARTITION BY a.AlbumID ORDER BY (SELECT NULL)) rn
FROM Albums a
LEFT JOIN AlbumImages i ON a.AlbumID = i.AlbumID
WHERE AlbumType = 1 AND a.IsVisible = 1 AND a.IsActive = 1
)
SELECT AlbumID, Title, AlbumImageName, Description, AlbumDate, AlbumType
FROM cte
WHERE rn = 1;