2017-08-03 6 views
0

私は映画のPostgresデータベースを持っています。私は、俳優が演奏したすべての映画を効率的に一覧表示し、映画のすべての俳優をリストしたいと思います。Postgresの外部キーに基づいてデータを選択する方法は?

SELECT title FROM movies,castings WHERE movies.id = castings.movieid and castings.actorid = (SELECT id FROM actors where name = $name and sname = $sname); 

SELECT name, sname FROM actors,castings WHERE actors.id = castings.actorid and castings.movieid = (SELECT id FROM movies where title = $title); 

データベース::

CREATE SEQUENCE directors_id_seq; 
CREATE TABLE directors (
    id BIGINT PRIMARY KEY DEFAULT nextval('directors_id_seq'), 
    name TEXT, 
    sname TEXT 
); 

CREATE SEQUENCE actors_id_seq; 
CREATE TABLE actors (
    id BIGINT PRIMARY KEY DEFAULT nextval('actors_id_seq'), 
    name TEXT, 
    sname TEXT 
); 

CREATE SEQUENCE movies_id_seq; 
CREATE TABLE movies (
    id BIGINT PRIMARY KEY DEFAULT nextval('movies_id_seq'), 
    title TEXT NOT NULL, 
    year INT NOT NULL, 
    votes INT, 
    score INT, 
    director BIGINT NOT NULL REFERENCES directors (id) 
); 

CREATE TABLE castings (
    movieid BIGINT REFERENCES movies (id), 
    actorid BIGINT REFERENCES actors (id), 
    ord INT, 
    PRIMARY KEY (movieid, actorid) 
); 

がどのように私はすべてのムービーを一覧表示することができます現在、私は(私はそれを行うには良い方法があるbileive)これら2つのSELECT文 を使用してい

俳優が演じた? ムービーで再生されたすべてのアクタを一覧表示するにはどうすればよいですか?

- おかげで、

答えて

0

は、これはそれを行う必要があります。

SELECT M.* 
FROM movies M 
INNER JOIN castings C ON C.movieid = M.id 
INNER JOIN actors A ON A.id = C.actorid 
WHERE A.name = $name 
AND A.sname = $sname 

すべての俳優が映画で演じ俳優が演じ

すべてのムービーを

SELECT A.* 
FROM actors A 
INNER JOIN castings C ON C.actorid = A.id 
INNER JOIN movies M ON M.id = C.movieid 
WHERE M.title = $title 
+0

それはうまくいきました。ありがとうございました! – hythm

関連する問題