我有3张桌子
表1:songs
-songname varchar
-singerlabel varchar
-date date
-category varchar
表2:singer
-singerlabel varchar
-singer# varchar
表3:singerNote
-singer# varchar
-firstname varchar
-lastname varchar
表1使用singerlabel
连接到表2。
表2使用singer#
连接到表3。
答案 0 :(得分:0)
如果RDBMS支持窗口功能,则可以使用bye
来实现:
ROW_NUMBER()
没有窗口功能,您可以使用具有SELECT x.*
FROM (
SELECT
si.*, sn.first_name, sn.last_name, so.songname, so.date, so.category
ROW_NUMBER() OVER(PARTITION BY so.singerlabel ORDER BY so.date DESC) rn
FROM singer si
INNER JOIN singerNote sn ON sn.singer# = si.singer#
INNER JOIN songs so ON so.singerlabel = si.singerlabel
) x WHERE x.rn = 1
条件的相关子查询,以确保您正在加入最新的歌曲:
NOT EXISTS
答案 1 :(得分:0)
使用此查询:
select singerlabel, max(date) maxdate
from songs
group by singerlabel
您将获得每个singerlabel
的最大日期,然后将join
移至其他3个表:
select sn.firstname, sn.lastname, songs.songname
from (
select singerlabel, max(date) maxdate
from songs
group by singerlabel
) s inner join singer
on singer.singerlabel = s.singerlabel
inner join singernote sn
on sn.singer = singer.singer
inner join songs
on songs.singerlabel = s.singerlabel and songs.date = s.maxdate