【发布时间】:2019-02-18 21:39:11
【问题描述】:
我正在尝试编写一个 MySQL 查询,该查询将查找由名字以 B 开头的演员领导的电影的标题。我有 2 个表,一个演员表和一个电影表。在我的 Actor 表中,我有 actID 和 actName,在我的 Movie 表中,我有 mvID、actID (FK)、mvTitle、mvGenre、mvPrice、mvYear。我已经为一个类似的问题编写了一个查询,并且我试图为这个查询修改它,但它并不完全有效。到目前为止我所拥有的是:
SELECT mvTitle
FROM Movie
WHERE EXISTS (SELECT mvGenre
FROM Movie,
Actor
WHERE (Actor.actID = Movie.actID)
and (Actor.actName LIKE 'B%'))
它返回所有电影标题而不是返回特定的标题(因为它应该只返回 3 个标题)但返回所有 10 个标题。
【问题讨论】:
-
您需要一个相关的子查询。 (即条件包括主查询电影表。)
-
因为你使用EXISTS,所以使用inner join
-
今日提示:切换到现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 -
EXISTS询问子查询是否返回一行。您的子查询返回所有“B%”演员及其电影。总是。您可以通过单独运行子查询来检查这一点。它的结果与您想要信息的主要查询的电影无关。这称为非相关子查询。您需要一个相关的子查询,而不是查找所有电影的所有“B%”演员,而是查找主查询中该行的一部电影的“B%”演员。请参阅 fa06 的答案以了解差异...