2

我有两张表,一张用来存储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_NameAlbum_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

任何帮助表示赞赏。

4

3 回答 3

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;
于 2013-09-10T11:38:09.760 回答
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
)
于 2013-09-10T11:42:16.840 回答
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,请相应地进行更改。

请随时澄清。

干杯!!!

于 2013-09-10T12:38:58.037 回答