두 개의 테이블이 있다고 가정합니다. 하나라는 무비 :지정된 값 중 하나 이상이있는 행을 찾으려면 SQL 쿼리
- 그 영화에 나타나는 명 포함하는
- 에서 moviename 그런
다른라는 배우를 MovieId :
- 이 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');
그러나 내 경우에는 내가 내가 할 수있는 방법을 찾으려는 WHERE 절에 이러한 조건의 몇 가지 더있을 수 있습니다 MOVIES 테이블을 내가 선택한 1 차 테이블로 만듭니다.
이 질문을하는 가장 좋은 방법은 무엇입니까? 필자는 Oracle 11g를 사용하고 있지만 표준 SQL 메소드가 필요합니다. 그럼 당신을
CREATE TABLE movie (
movie_id int primary key
,moviename text
-- more fields
);
CREATE TABLE actor (
actor_id int primary key
,actorname text
-- more fields
);
CREATE TABLE movieactor (
movie_id int references movie(movie_id)
,actor_id int references actor(actor_id)
,CONSTRAINT movieactor_pkey PRIMARY KEY (movie_id, actor_id)
);
: m 관계 : 당신이 3 테이블 N 구현을 가져야한다
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')
)
또는
SELECT *
FROM MOVIES m
WHERE m.MovieId IN
(
SELECT a.MovieId
FROM ACTORS a
WHERE a.ActorName IN ('Tom Hanks', 'Russell Crowe', 'Arnold Schwarzenegger')
)
선택할 실제 테이블을 표시하려면 도움이 될 것입니다 ... –