0

俳優と映画の 2 つのテーブルと、それらを接続する 3 番目のテーブル ロールがあります。ActorId は、アクターの主キーです。MovieCode は、movies テーブルの主キーです。映画が公開された日付、映画の名前、俳優の役割を表示する必要がある俳優のページがあります。私のクエリは次のとおりです。

SELECT mo.date, mo.title, role.roleDescription
FROM movies mo, role
inner join actors
on role.actorId=actors.actorId
inner join movies 
on role.movieCode=movies.movieCode
where role.actorid=2

クエリはデカルト積を返します。何が問題でしょうか?よろしくお願いします!

4

2 に答える 2

2

問題は、2 回参加していることですmovies: 1 回 asmoと 1 回 as movies。はどの句または句moでも言及されていないため、 の値を除外することはありません。それを修正するには、その部分を削除し、 -listのフィールドを変更して の代わりに使用します。ONWHEREmomovies mo,SELECTmoviesmo

SELECT movies.date, movies.title, role.roleDescription
FROM role
inner join actors
on role.actorId=actors.actorId
inner join movies 
on role.movieCode=movies.movieCode
where role.actorid=2

actorsまた、から何も選択しておらず、必要な のactors値がすでにわかっているため、 への結合は実際には必要ありませactoridん。したがって、それを削除し、わかりやすくするために少し再構築します。

SELECT movies.date,
       movies.title,
       role.roleDescription
  FROM movies
  JOIN role
    ON role.movieCode = movies.movieCode
 WHERE role.actorid = 2
;
于 2013-12-22T18:16:56.130 に答える
0

特定の俳優の映画と俳優の役割を選択したいので、俳優テーブルの結合をスキップできます。また、クエリで映画を2回結合しています

SELECT mo.date, mo.title, r.roleDescription
FROM movies mo, 
INNER JOIN role r
ON r.movieCode=mo.movieCode
WHERE r.actorid=2
于 2013-12-22T18:18:42.843 に答える