我有两个表,我用来存储Album_Name
和我用来存储Album_Photos
的其他表
我想写一个查询,以便它可以让我了解详细信息
Album_Name Album_ID Album_Date ImageSmall
Album One 1 2013-08-02 100.jpg
Album Two 2 2013-09-09 55.jpg
我想要从Album_Name
表和第一张图片的详细资料专辑详情,我没有从Album_Photo
表分配到相册
我试过JOINS哪个不起作用然后我创建一个视图将跟随SQL这不起作用
SELECT
a.Album_Name AS Album_Name
, a.Album_Date AS Album_Date
, a.Page_ID AS PageID
, p.Image_ID AS Image_ID
, p.Image_Small AS Image_Small
FROM
Album_Name a
LEFT OUTER JOIN
Album_Photos p ON a.Album_ID = p.Album_ID
我尝试了DISTINCT Album_Name
,因为它让我和上面的语句一样
SELECT
DISTINCT [Album_Name], Album_Date, Page_ID, Image_Small
FROM
vw_AlbumName_AlbumPhotos
WHERE
Page_ID = 3
样本数据Album_Name
和Album_Photos
表
Album_ID Album_Name Album_Date Page_ID
1 Album One 2013-08-02 3
2 Album Two 2013-09-09 3
3 Album Three 2013-09-10 9
Image_ID Page_ID Album_ID ImageSmall
1 0 1 100.jpg
2 0 1 21.jpg
3 0 1 36.jpg
4 0 1 44.jpg
5 0 2 55.jpg
6 0 2 66.jpg
7 0 3 10.jpg
任何帮助表示赞赏。
您正在复制,因为每张专辑有多张照片。要获得一个,请使用row_number()
:
SELECT Album_Name AS Album_Name, a.Album_Date AS Album_Date, a.Page_ID AS PageID,
p.Image_ID AS Image_ID, p.Image_Small AS Image_Small
FROM Album_Name a left outer JOIN
(select p.*, row_number() over (partition by Album_Id order by Image_ID) as seqnum
from Album_Photos p
) p
ON a.Album_ID = p.Album_ID and seqnum = 1;
我假设您的相册表名为Album
而不是Album_Name
SELECT .Album_Name AS Album_Name
, a.Album_Date AS Album_Date
, a.Page_ID AS PageID
, p.Image_ID AS Image_ID
, p.Image_Small AS Image_Small
FROM Album a left outer JOIN Album_Photos p
ON a.Album_ID = p.Album_ID
WHERE p.Image_ID = (
SELECT MIN(Image_ID)
FROM Album_Photos
WHERE Album_Photos.Album_ID = Album.Album_ID
)
此查询可以更紧密地满足您的目的,而不会有太多复杂
SELECT Album_Name AS Album_Name, a.Album_Date AS Album_Date,
p.Image_ID AS Image_ID, p.Image_Small AS Image_Small
FROM Album_Name a left outer JOIN
Album_Photos p
ON a.Album_ID = p.Album_ID group by p.Album_ID
这是我能想到的最好的查询。
原因:*这不使用任何子查询,它更好地避免子查询,如果你可以简单地做*这不使用任何row_number *看起来不那么复杂*这个我亲自测试,发现它工作。
说明:Group by返回不同的行。注意:您的表包含列名称为imageSmall,因此如果您希望它是image_small,则相应地更改。
请随意澄清。
干杯!!!