如何通过 join 和 where 限制查询结果

问题描述 投票:0回答:0

我正在使用MySQL。

有两个表

titles
genres
,其中两种类型的记录具有多对多关系。所以还有第三个表叫做
title_genres

我想选择所有具有特定类型的标题并进行分页。

我的第一个想法是:

select
  titles.name, genres.name
from
  titles
  left join
    title_genre_relationships
    on titles.id = title_genre_relationships.title_id
  left join
    genres
    on genres.id = title_genre_relationships.genre_id
where
  genres.name in ('one', 'two')
order by titles.name ASC
offset 0
limit 20;

但是,该限制将返回 20 个连接结果,而不是返回 20 个标题结果。

我看到许多答案使用标题上的嵌入式选择和限制查询作为外部查询中最左边的表。该解决方案对我不起作用,因为虽然它保证对标题进行限制,但不能保证它们是具有所需类型的标题。

还有一些解决方案可以生成具有预期类型的所有标题 ID。然后将它们置于外部 where 部分的

in
状态。在这里我担心性能。如果匹配的标题数量很大的话,还有效率吗?

这里是否可以以有效的方式对返回的标题而不是连接的结果进行限制?

提前致谢!

mysql join many-to-many left-join limit
© www.soinside.com 2019 - 2024. All rights reserved.