1

IMDB.com に似た Web サイトを作成する予定です。実行時間を短縮するために、次の構造を使用しています。仕事が早くても大丈夫?

表1

Id Movie_name 説明

1 名前 1 いくつかの説明
2 名前 2 いくつかの説明
3 名前 3 いくつかの説明

表 2

id アクター名
1 名前 1
2 名前 2
3 名前 3
4 名前 4

表 3

id movieid アクター ID

1 1 1
2 1 2
3 1 3
4 1 9
5 2 6
6 2 5
7 2 8
8 2 1

映画プログラムで俳優をリストしたい場合、テーブル 3 から俳優 ID を取得し、テーブル 2 からそれぞれの名前を検索します (単一のクエリを使用)。俳優の映画を一覧表示する場合、テーブル 3 から映画 ID を取得し、最初のテーブルからそれぞれの名前を見つけます。正常に動作しますか?他のアイデアはありますか?

4

2 に答える 2

2

これにより、指定された映画のすべての俳優に、

SELECT  c.ID, c.actorName
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   a.ID = 1

これは、指定された俳優のすべての映画を提供します

SELECT  a.*
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   c.ID = 1

結合についてさらに知識を深めるには、以下のリンクにアクセスしてください。

更新1

これはと呼ばれますRelational Division

SELECT  a.ID, a.Movie_Name
FROM    table1 a
        INNER JOIN table3 b
            ON a.ID = b.movieID
        INNER JOIN table2 c
            ON b.actorid = c.ID
WHERE   c.ID IN (1, 2, 3)
GROUP   BY a.ID, a.Movie_Name
HAVING  COUNT(DISTINCT c.ID) = 3
于 2013-02-17T12:32:49.770 に答える
0

id フィールドを取り除いて table3 を変更することをお勧めします。ムービー ID とアクター ID を一緒に主キーとして使用します。Jermaine Xu のコメントで提案されているように、キャラクターの名前や出現順序など、このテーブルに他のフィールドを追加することをお勧めします。

于 2013-02-17T12:37:04.310 に答える