我有一个包含多个版本项目的表格。我能给出的最简单的比较是拥有一个歌曲数据库,并且可能会重复播放一首歌曲,因为它位于多个专辑中。我想用最新的发布日期来播放这首歌。
歌曲表:
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
感谢任何帮助。 :)
答案 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))