按另一个表中的值排序SQL查询

时间:2011-03-31 15:13:49

标签: sql sorting

我正在查询一个名为艺术家的表格,但我想基于名为paintings的表格(艺术家has_many绘画 - 绘画表有artist_id列)对响应进行排序。

更具体地说,我想通过最近的绘画对艺术家进行排序(绘画中有一个名为date_created的列)。有谁知道如何做到这一点?

5 个答案:

答案 0 :(得分:3)

理想情况下,这应该使用ANSI连接完成:

SELECT DISTINCT a.artist
FROM            artists a
     INNER JOIN paintings p
     ON         a.artistID = p.artistID
ORDER BY        p.date_created desc

答案 1 :(得分:2)

也许是这样的,取决于你的架构的具体细节?

SELECT DISTINCT artists.* FROM
artists, paintings
WHERE artists.id = paintings.artist_id
ORDER BY paintings.painting_date DESC;

这将加入艺术家ID上的两个表格,然后按其绘画日期排序。 DISTINCT确保每位艺术家只能获得一行。

答案 2 :(得分:1)

这将只返回每位艺术家一次,并为该艺术家提供最新的date_created值。

SELECT artists.name, paintings.date_created
FROM artists JOIN (
    SELECT artist_id, MAX(date_created) as date_created FROM paintings GROUP BY artist_id
) paintings ON artists.id = paintings.artist_id
ORDER BY paintings.date_created DESC

答案 3 :(得分:0)

如果我理解你的要求:

1)写一个聚合查询,返回每个艺术家和他/她的最新作品; 2)将其用作子查询,将其连接到艺术家表; 3)从连接中选择列,按最新绘画的日期排序。

答案 4 :(得分:0)

您可以创建查询:

         select artistid, max(paintingdate)
         from paintings
         group by artistid

然后以内联视图的形式加入:

       select artistname from artist
       inner join
       ( 
         select artistid, max(paintingdate) as latestdate
         from paintings
         group by artistid
        ) as Foo
        on artist.artistid = Foo.artistid
        order by latestdate desc