SQLite子查询与内连接问题:查询Audioslave专辑单价返回记录数异常
错误原因
你第三段代码的核心问题是INNER JOIN未指定两张表的关联条件:
省略了ON t.AlbumId = a.AlbumId的关联逻辑,SQL会将符合条件的Audioslave专辑行,和整张tracks表的所有行做笛卡尔积,也就是每一张专辑都会和全库所有曲目匹配一次,最终返回的行数=Audioslave专辑数量 × 全库曲目总数,所以才会出现和预期40条差距极大的10509条记录。
修正方案
方案1:补全JOIN关联条件即可
select a.Title, t.UnitPrice from albums a inner join tracks t on t.AlbumId = a.AlbumId where a.AlbumId in ( select AlbumId from albums where ArtistId in ( select ArtistId from artists where Name = 'Audioslave'));
方案2:纯嵌套子查询实现(无需JOIN)
select (select Title from albums a where a.AlbumId = t.AlbumId) as Title, t.UnitPrice from tracks t where t.AlbumId in ( select AlbumId from albums where ArtistId in ( select ArtistId from artists where Name = 'Audioslave' ) );
内容的提问来源于stack exchange,提问作者TechRooster
相关产品推荐
相关产品推荐

