在SQL中,从表a中选择all,其中列的值等于表b中最近的条目的值?

时间:2015-08-19 18:23:32

标签: mysql sql-server

我有一个包含多个版本项目的表格。我能给出的最简单的比较是拥有一个歌曲数据库,并且可能会重复播放一首歌曲,因为它位于多个专辑中。我想用最新的发布日期来播放这首歌。

歌曲表:

ID    Title    AlbumID    GenreID    ProducerID.......Many other columns
1     A Song   1          3          12
2     A Song   2          3          5
3     Sing     3          5          10

专辑表:

ID    Title           ReleaseDate
1     Album           2001-01-01
2     Greatest Hits   2010-01-01
3     Another Album   2005-01-01

我可以根据这样的标题收回所有歌曲:

Select * from Songs where title like '%song%'

我想做这样的事情:

Select * from Songs where title like '%song%' and AlbumID In 
(Select AlbumID from Albums where ***ReleaseDate is most recent***)

结果将是一首歌:

ID   Title   AlbumID   GenreID   ProducerID........Many other columns
2    A Song  2         3         5

感谢任何帮助。 :)

3 个答案:

答案 0 :(得分:0)

原创

Select * from Songs where title like '%song%' and AlbumID In 

(从相册中选择AlbumID,其中 ReleaseDate是最新的 ) 试试这个

Select * from Songs where title like '%song%' and AlbumID In 
(Select AlbumID from Albums order by ReleaseDate DESC Limit 1)

答案 1 :(得分:0)

这是一种独立于数据库的方法。

基本上它会生成一个数据子集,显示按日期显示的最新歌曲。然后,它会根据最新日期的专辑中的歌曲图块和日期将此子集连接回整个集合。

确实做了几个假设。

  • 歌曲瓷砖是相同的。
  • 如果同一首歌在同一日期的多张专辑中发布,则会同时返回。

SELECT * 
FROM Songs S
INNER JOIN ALBUM A
 on S.ID = A.ID
INNER JOIN (
  SELECT max(A.RealeaseDate) as Newest, S.Title
  FROM SONGS S
  INNER JOIN album A
   on A.ID = S.AlbumID
  GROUP BY S.Title) C
 on C.Title = S.Title
and C.Newest= A.ReleaseDate

此方法允许您根据需要从任一表中获取数据。使用exists会更快,但是,它限制了可以返回的数据元素(列)。

答案 2 :(得分:0)

我想我只需要在网上询问我找出答案。

select * from songs where title like '%song%' and 
AlbumID In(Select distinct AlbumID from Albums where 
albums.ReleaseDate= (Select Max(ReleaseDate) from albums))