2017-02-13 2 views
-2

oracle에 쿼리를 쓰려고하는데 테이블을 함께 조인하는 데 문제가 있습니다. 그래서 나는 특정 유명인이 주연 한 영화와 유명인 관계를 보여주는 두 개의 테이블을 가지고 있습니다. 나는 탐 크루즈와 그가 연인 관계에있는 유명인과 함께 출연 한 영화를 찾아야한다. 그래서 관계 테이블과 함께 starredin 테이블에 가입해야합니다. 여기에 내가 가진 무엇 :이 실행테이블에 SQL이 없습니다.

SELECT S2.CELEB2 AS Costar, 
S1.MOVIE 
FROM S1.StarredIn, 
S2.StarredIn, 
Relationships 
WHERE S1.CELEB = Relationships.CELEB1 
AND S2.CELEB = Relationships.CELEB2 
AND S1.CELEB = 'Tom Cruise'; 

매번 내가 StarredIn라는 두 테이블을 생성하고 테이블이 관계라는 것을 제외하고 테이블 또는 뷰가 존재하지 않습니다라는 오류가 발생하고 난하지 잘못했다 알고 - 생성하는 동안 테이블 이름을 씁니다. 그렇다면 왜 계속 오류가 발생합니까?

CREATE TABLE Relationships (
    celeb1 VARCHAR(30), 
    celeb2 VARCHAR(30), 
    started VARCHAR(15), 
    ended VARCHAR(15) 
); 

CREATE TABLE StarredIn (
    celeb VARCHAR(30), 
    movie VARCHAR(100) 
); 

을 그리고 나는 삽입 문 무리가 있습니다

여기에 테이블을 생성하기 위해 문을입니다.

+0

테이블 이름과 필드를 표시하십시오. – GolezTrol

+0

나는 내 질문을 업데이트했다. –

답변

2

이 테이블에 'StarredIn'더 다음과 같아야을 'S1'의 별칭을 적용 할 의도라면 :

From StarredIn S1, StarredIn S2, Relationships 
+0

여전히 테이블 또는 뷰가 존재하지 않는다고 말합니다. 내 질문을 업데이트하여 테이블이 어떻게 생성되는지 보여주었습니다. –

0

내가 어떻게 당신이에 별명을주는에 문제가 있다고 생각 표. 별칭을주는

올바른 형식은

TABLE_NAME의 ALIAS_NAME입니다.

아래 쿼리를 실행하십시오.

SELECT Relationships.CELEB2 AS Costar, 
S1.MOVIE 
FROM StarredIn S1, StarredIn S2 , 
Relationships 
WHERE S1.CELEB = Relationships.CELEB1 
AND S2.CELEB = Relationships.CELEB2 
AND S1.CELEB = 'Tom Cruise'; 
+0

또한 테이블 작성 방법을 보여주는 내 질문을 업데이트했습니다. –

+0

질문을 업데이트 해 주셔서 감사합니다. 정말 도움이됩니다. 테이블 이름에 별칭을 지정하는 올바른 구문을 사용한 후에도 오류가 계속 발생하는지 확인하십시오. – Tajinder

+0

코드를 사용하면 명령이 제대로 종료되지 않는다는 오류가 발생합니다. –

0

S1.StarredIn 스키마 S1StarredIn라는 이름의 테이블이 의미한다. 그러나 실제로는 테이블에 별칭 이름 인 StarredIn S1 만 부여하려고합니다.

또한 1992 년에 중복 된 오래된 조인 구문을 사용하고 있습니다. 대신 명시 적 ANSI 조인을 사용하십시오.

데이터베이스 디자인 또는 이에 대한 액세스가 이상합니다. StarredIn에는 주연 배우와 주인공이 포함되어 있습니다. Relationships은 두 명의 배우와 관련이 있습니다. 그러나이 관계를 사용하여 두 개의 StarredIn 레코드를 관련시킵니다. 그래서 Tom Cruise와 Katie Holmes가 관련이 있고 Tom Cruise가 Top Gun에서 뛰었더라도, 그것이 Katie Holmes가 그 영화에 함께 출연 한 것을 의미하지는 않습니다. 귀하의 질문에 잘못된 가정을하고있는 것 같습니다.

마찬가지로 액터의 이름이 Relationships 테이블에 이미 있기 때문에 StarredIn 테이블에 다시 가입 할 필요가 없습니다.

쿼리

제대로 같이 쓸 수있다 :

select r.celeb2 as costar, s1.movie 
from starredin s1 
join relationships r on r.celeb1 = s1.celeb 
where s1.celeb = 'Tom Cruise'; 

하지만 언급 한 바와 같이 결과는 당신이 찾고있는 무엇을하지 않을 수 있습니다.

Relationships에 관계없이 StarredIn에 자체 참가하여 같은 영화에서 다른 배우를 찾을 수 있습니다.

select s2.celeb as costar, s1.movie 
from starredin s1 
join starredin s2 on s2.movie = s1.movie and s2.celeb <> s1.celeb 
where s1.celeb = 'Tom Cruise' 
order by s1.movie; 
관련 문제