-2

テーブル付きのmoviesdbがあります

  1. 映画テーブル;
  2. データ表
  3. 人物表
  4. 文字テーブル
  5. モード表

映画の表

===============================================
CODE : TITLE :        DESCRIPTION       YEAR
=====================================================
1      IRON MAN 3       xxxxx          2013
2      STAR WARS        xxxxx          2013

人物表

===============================================
CODE : NAME:                 BIRTH_DATE
=====================================================
1      SHANE BLACK         1965:04:04 00:00:00
2      ROBERT DOWNEY       1965:04:04 00:00:00
3      Gwyneth Paltrow     1965:04:04 00:00:00
4      Don Cheadle         1965:04:04 00:00:00

キャラクター表

===============================================
PERSON  : NAME:             MOVIE
=====================================================
2      TONY STARK          1
3      PEPPER POTTS        1
4      Col. James Rhodes   1

モード表

===============================================
CODE : NAME : 
=====================================================
1      DIRECTOR 
2      WRITER
3      ACTOR
4      CHARACTER

データ表

===============================================
CODE : MOVIE :     PERSON   MODE
=====================================================
1      1             1       1
2      1             2       3 
3      1             3       3 
4      1             4       3 

最終的な答えは次のようになります:

===============================================
CODE : MOVIE TITLE :  DIRECTOR  :     ACTORS           CHARACTERS
=====================================================
1      IRON MAN 3     SHANE BLACK   Robert Downey Jr.   Tony Stark
                                    Gwyneth Paltrow     Pepper Potts
                                    Don Cheadle         Col. James 

ありがとう、

4

1 に答える 1

1

2 つのテーブルを使用する場合と同じようにinner join、次のようにできます。left join

select
  m.code, m.title, m.director,
  group_concat(p.name, '\n') as actors
from
  movies m
  left join data d on d.movie_code = m.code
  left join persons p on p.code = d.person_code
where
  m.code = 1

left join映画は俳優がいなくても存在できると思うので、ここを選んでいます。情報がまだ不完全な場合や、ドキュメンタリーも保存したい場合があります。を使用すると、クエリに表示されるinner join映画にも俳優が必要になります。

personsアクター以上のものを含めることができると仮定すると、おそらく役割を持つことになります。人はある映画で俳優になり、別の映画を監督することができるので、この役割はdata.

次のようなことができます。

select
  m.code, m.title,
  group_concat(case when d.role = 2 then p.name, '\n' end ) as directors,
  group_concat(case when d.role = 1 then p.name, '\n' end ) as actors
from
  movies m
  left join data d on d.movie_code = m.code
  left join persons p on p.code = d.person_code
where
  m.code = 1

これにより、映画と一緒に名前を保存するだけでなく、映画の監督 (または複数の監督) を個人的に保存する機会も得られます。

[編集] 面白いことに、編集後、ロール (モード) のテーブルが既にあることがわかりましたが、以前は説明していませんでした。かなり紛らわしいですが、その場合は秒クエリが役立つと思います。フィールド名を編集で指定した正確な名前と一致させるのはあなた次第です。

于 2013-07-28T06:32:27.273 に答える