Join 如何使一个表中列的条件应用于主键的每个实例?

Join 如何使一个表中列的条件应用于主键的每个实例?,join,conditional-statements,Join,Conditional Statements,我有一个名为“艺术家”的表格,其中有艺术家ID、艺术家名称、艺术家流派等栏,还有一个名为“专辑”的表格,其中有艺术家ID、专辑ID、专辑名称、专辑编号、歌曲等 我通过艺人Id加入这两个表格。现在我想知道所有从未拥有超过12首歌曲专辑的艺人。 我试过这个: SELECT Distinct Artist_Name FROM Artists INNER JOIN Albums ON Albums.Artist_ID=Artists.Artist_Id WHERE Album_Number_Songs

我有一个名为“艺术家”的表格,其中有艺术家ID、艺术家名称、艺术家流派等栏,还有一个名为“专辑”的表格,其中有艺术家ID、专辑ID、专辑名称、专辑编号、歌曲等

我通过艺人Id加入这两个表格。现在我想知道所有从未拥有超过12首歌曲专辑的艺人。 我试过这个:

SELECT Distinct Artist_Name
FROM Artists
INNER JOIN Albums
ON Albums.Artist_ID=Artists.Artist_Id
WHERE Album_Number_Songs < 12
但是,这只是检查所有实例,输出将仅取决于专辑是否包含<12个艺术家整体…有人知道吗?

尝试以下方法:

select r.artist_name 
from artists r
left join albums l on r.artist_id = l.artist_id
group by r.artist_name
having max(l.album_number_songs) <= 12
注意:我已经在MS SQL Server上对此进行了测试,但我认为这种语法也适用于Oracle和MySQL。

请尝试以下查询:

SELECT Artist_Name FROM Artists 
WHERE Artists.Artist_ID NOT IN 
(SELECT Albums.Artist_ID FROM Albums WHERE Albums.Artist_ID = Artists.Artist_ID AND Albums.ALbum_Number_Songs > 12)

这还包括没有专辑的艺术家,我认为这与最初的任务相对应。

太好了!非常感谢你们两位!请记住,将帮助您解决问题的答案标记为已接受答案。