我有两个表用于存储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
感谢任何帮助。
答案 0 :(得分:5)
您正在复制,因为每张专辑有多张照片。要获得一个,请使用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;
答案 1 :(得分: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
)
答案 2 :(得分:1)
此查询可以更贴近您的目的,而不会有太多复杂性。
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。
请随意澄清。
干杯!!!