SQL查询以查找具有至少一个指定值的行

Mik*_*sen 3 sql database oracle

假设你有两张桌子.一个叫MOVIES:

  • MovieId
  • 电影名称

然后是另一个名为ACTORS,其中包含出现在这些电影中的人:

  • MovieId
  • ActorName

现在,我想编写一个查询,返回包含以下演员中的一个或多个的任何电影:"Tom Hanks","Russell Crowe"或"Arnold Schwarzenegger".

一种方法是这样的:

SELECT DISTINCT A.MovieId, M.MovieName FROM ACTORS A
INNER JOIN MOVIES M USING (MovieId)
WHERE A.ActorName IN ('Tom Hanks', 'Russell Crowe', 'Arnold Schwarzenegger');
Run Code Online (Sandbox Code Playgroud)

哪个是完美的,但在我的情况下,我可能在WHERE子句上有更多这些条件,所以我想找到一种方法使MOVIES表成为我选择的主表.

查询此问题的最佳方法是什么?如果重要的话,我正在使用Oracle 11g,但我希望有一个标准的SQL方法.

Bog*_*ean 12

您可以使用EXISTSIN子查询:

SELECT *
FROM MOVIES m
WHERE EXISTS
(
    SELECT *
    FROM ACTORS a
    WHERE a.MovieId = m.MovieId
    AND a.ActorName IN ('Tom Hanks', 'Russell Crowe', 'Arnold Schwarzenegger')
)
Run Code Online (Sandbox Code Playgroud)

要么

SELECT *
FROM MOVIES m
WHERE m.MovieId IN 
(
    SELECT a.MovieId
    FROM ACTORS a
    WHERE a.ActorName IN ('Tom Hanks', 'Russell Crowe', 'Arnold Schwarzenegger')
)
Run Code Online (Sandbox Code Playgroud)