我有一个albums
表,每个专辑都有一个ID
。
我还有一个reviews
表,每个评论通过albumID
列链接到相应的相册。
我想知道如何选择评论表中存在ID的所有专辑。
我当时正在考虑从评论列中选择所有albumId,然后执行select where id in
,但我觉得这样效率很低。
这是在MySQL中
Albums Table
- ID
Reviews Table
- ID
- albumID
预期结果:所有具有评价的相册。 (例如:“评论”表中显示其ID的所有相册)
最佳答案
这是使用简单JOIN的一种方法。内部联接表示法将仅包括两个表中都存在的记录。它允许您访问两个表中的数据,如果您也需要审阅中的数据,这可能会很有用。
Select * from albums A
inner join reviews R
on A.ID = R.AlbumID
接下来的方法通常是最快的,但是您只能从相册中获取数据。这使用所谓的相关子查询,通常是最快的方法。
SELECT * from albums A
where exists (Select 1 from reviews R where A.ID = R.albumID)
第三种方法,但通常是最慢的...使用称为
IN()
的概念。此处的子查询会根据评论生成ID列表,并且仅显示该列表中的相册。Select * from albums where ID IN (SELECT albumID from Reviews)