我有一个albums
的表,每个专辑有一个ID
。
我也有一个reviews
的表,每个评论都通过albumID
列链接到相应的专辑。
我想知道如何选择ID在评论表中存在的所有专辑。
我正在考虑从评论栏中选择所有的albumId,然后做一个select where id in
,但我觉得这将是非常低效的。
MySQL
Albums Table
- ID
Reviews Table
- ID
- albumID
期望结果:所有有评论的专辑。
下面是使用简单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)
这样可以:
select a.* from albums as a
inner join reviews as r
on r.albumID = a.ID