-1

SQLzoo の JOIN チュートリアルの質問 13 を解決しようとしています ( http://sqlzoo.net/wiki/More_JOIN_operations )

この質問は、映画「ジュリー・アンドリュース」が出演したすべての映画のタイトルと主演俳優をリストするように求めます.

次のスクリプトを作成しましたが、どこかが間違っています。

SELECT title, actor.name FROM
  movie JOIN casting ON movie.id=movieid
        JOIN actor ON actor.id=actorid
    WHERE ord=1
    AND title = ALL
      (SELECT title FROM 
         movie JOIN casting ON movie.id=movieid
               JOIN actor ON actor.id=actorid
           WHERE actor.name='Julie Andrews')
4

7 に答える 7

1

正しいスクリプトは次のとおりです。

SELECT m.title,
       a.name
FROM   movie m
       JOIN casting c
         ON m.id = c.movieid
            AND c.ord = 1
       JOIN actor a
         ON a.id = c.actorid
WHERE  m.id IN (SELECT m1.id
                FROM   movie m1
                       JOIN casting c1
                         ON m1.id = c1.movieid
                       JOIN actor a1
                         ON a1.id = c1.actorid
                WHERE  a1.name = 'Julie Andrews')  

列 m.title を WHERE ステートメントのプロキシとして使用している場合、スクリプトの実行に時間がかかり、SQLzoo サーバーがスクリプトを停止することに気付きました。代わりに、m.id 列を使用すると、読み込みが速くなります。可能であれば、常に文字ではなく数字をチェックすることをお勧めします。

私の最初のスクリプトのもう 1 つの問題は、IN の代わりに EQUAL 演算子を設定することでした。サブクエリは複数の行を返すため、IN 演算子を使用する必要があります。

于 2013-08-17T11:51:24.143 に答える
0

これはあなたがそれを得る正しい方法だと思います。

SELECT m.title, a.name FROM
  movie m JOIN casting c ON c.id = m.movieid
        JOIN actor a ON a.id=m.actorid
    WHERE m.ord=1
    AND m.title = ALL
      (SELECT m1.title FROM 
         movie m1 JOIN casting c1 ON c1.id=m1.movieid
               JOIN actor a1 ON a1.id=m1.actorid
           WHERE a1.name='Julie Andrews');

テーブルを列名で表示する必要がある場合は、このクエリを変更します

于 2013-08-17T11:23:30.610 に答える
0
select title, name from movie
join casting on (casting.movieid =movie.id)
join actor on (actor.id = casting.actorid)

where ord =1
and movieid in (select movie.id from movie
join casting on (casting.movieid =movie.id)
join actor on (actor.id = casting.actorid)

where name = 'Julie Andrews')
于 2018-10-28T17:20:10.970 に答える