如何使用AND条件选择多对多关系中的记录[重复]

Posted

技术标签:

【中文标题】如何使用AND条件选择多对多关系中的记录[重复]【英文标题】:How to select records in a many-to-many relation using an AND condition [duplicate] 【发布时间】:2014-06-03 11:52:42 【问题描述】:

我有一个跟踪电影和演员的数据库,包含以下表格:

Person(ID, Name)
Movie(ID, Name)
Actors(ID, PersonID, MovieID)

ID 字段都是主键,PersonID 和 MovieID 都是外键。

我想选择汤姆克鲁斯和布拉德皮特出演的所有电影。 我尝试执行以下操作:

SELECT * FROM Person, Actors
WHERE Person.ID = Actors.ActorID AND
(Person.Name= 'Tom Cruise' or Person.Name= 'Brad Pitt')
GROUP BY Actors.MovieID
HAVING COUNT(Actors.MovieID) > 1

这不起作用,因为人名不是唯一的(我无法将其更改为唯一的)。如果我有另一个叫布拉德皮特的演员,并且两个布拉德皮特在同一部电影中扮演,那么结果也会返回。

我该怎么做?

注意:我查询的演员数量可能会发生变化。我可能需要一部由 10 位演员全部出演的电影。

【问题讨论】:

【参考方案1】:

如下表之间的内连接

SELECT m.Name as MovieName 
FROM Movie m
inner join Actors a
on m.ID = a.MovieID
inner join Person p
on p.ID = a.ActorID 
and p.Name in ('Tom Cruise','Brad Pitt')

【讨论】:

这并不强制所有演员都在电影中扮演,只有一个。我都需要。

以上是关于如何使用AND条件选择多对多关系中的记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何只选择第一个多对多记录并将其作为单独的关系?

如何避免在 SQLAlchemy - python 的多对多关系表中添加重复项?

过滤多对多关系中的选择

多对多关系中的 JPA 条件查询

如何避免与 Doctrine2 和 Zend Framework 2 的多对多关系重复?

防止 SQLAlchemy 中多对多关系中的重复表条目