-3

db.movi​​es に 5 つのテーブルがあります。このような:

デシベル映画

id | title   | plot
------------------
1  | matrix  | ddd

db.別名

id | movie_id | aka_title | aka_country
----------------------------------------
1  | 1        | neo       | usa

デシベルのジャンル

id | genre_id | movie_id 
------------------------
1  | 1        | 1
2  | 2        | 1

db.genre_name

id | genre_name
---------------
1  | sci-fi
2  | action

デシベルタグ

id | movie_id | keyword
-----------------------
1 | 1         | hacker
2 | 1         | computer

次のように db.movi​​es テーブルを作成するにはどうすればよいですか。

デシベル映画

id | title   | plot | genre          | aka | aka_country | tags
1  | matrix  | ddd  | sci-fi, action | neo | usa         | hacker, computer

どうやってやるの?ありがとう!

4

2 に答える 2

4

LEFT JOINこれには a を使用する必要があります。

select m.id,
    m.title,
    m.plot,
    GROUP_CONCAT(distinct g.genre_name)  as genre,
    a.aka_title,
    a.aka_country,
    GROUP_CONCAT(distinct t.keyword) keyword
from movies m
left join aka a
    on m.id = a.movie_id
left join genre g
    on m.id =g.movie_id
left join genre_name gn
    on g.genre_id = gn.id
left join tags t
    on m.id = t.movie_id
group by m.id

このデータを別のテーブルに保存する理由がわかりません。テーブルではなく結果を意味しているだけだと思います。いずれかのLEFT JOINテーブルにレコードが存在しない場合、レコードを返すことができます。

SQL Fiddle with Demoを参照してください

于 2012-09-13T21:47:18.490 に答える
1

以下を使用できます。

select
    mov.id,
    mov.title,
    mov.plot,
    group_concat(distinct genre_name) as genre,
    aka_title as aka,
    aka_country,
    group_concat(distinct keyword) as tags
from movies mov
join aka on mov.id = aka.movie_id
join genre gen on mov.id = gen.movie_id
join genre_name gna on gen.genre_id = gna.id
join tags tag on mov.id = tag.movie_id
group by mov.id;

sqlfiddleを参照してください

于 2012-09-13T21:41:56.950 に答える