Mik*_*sen 3 sql database oracle
假设你有两张桌子.一个叫MOVIES:
然后是另一个名为ACTORS,其中包含出现在这些电影中的人:
现在,我想编写一个查询,返回包含以下演员中的一个或多个的任何电影:"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
您可以使用EXISTS或IN子查询:
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)
| 归档时间: |
|
| 查看次数: |
18161 次 |
| 最近记录: |