0
私はほとんどMySQLを使用していないので、これはとても新しいです。私の最終目標は、映画のID、映画の名前、ジャンルのリストを含むJavaに入れることができるリストを持つことです。私はSQLクエリーを理解しようとしているだけなので(後で他のものを解析できるように)中間テーブルを使用して複数のジャンルの映画のMySQLクエリ
CREATE TABLE `movies` (
`id` int NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL DEFAULT '',
`year` int NOT NULL,
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `genres` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(32) NOT NULL DEFAULT '',
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `genres_in_movies` (
`genre_id` int NOT NULL,
`movie_id` int NOT NULL,
FOREIGN KEY (`genre_id`) REFERENCES `genres`(`id`),
FOREIGN KEY (`movie_id`) REFERENCES `movies`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
が私のテーブルは、次の値を持っているとしましょう:私は3つのテーブルを持っている
MOVIE LIST
------
1 Zoolander 2001 Comedy
2 Citizen Kane 1949 Drama, Suspense
3 Psycho 1960 Horror, Romance, Suspense
が、私はこのクエリを試してみました:私のクエリでは、次の出力が
MOVIES
------
1 Zoolander 2001
2 Citizen Kane 1941
3 Psycho 1960
GENRES
------
1 Comedy
2 Horror
3 Drama
4 Suspense
5 Romance
6 Documentary
GENRES_IN_MOVIES (genre_id, movie_id)
------
1 1 -- Comedy - Zoolander
3 2 -- Drama - Citizen Kane
4 2 -- Suspense - Citizen Kane
2 3 -- Horror - Psycho
5 3 -- Romance - Psycho
4 3 -- Suspense - Psycho
私が欲しい
SELECT movies.*, genres.name
FROM movies
INNER JOIN genres_in_movies ON genres_in_movies.movie_id = movies.id
INNER JOIN genres ON genres_in_movies.genre_id = genres.id
GROUP BY movies.title;
しかし、私には1つのジャンル名しか与えられません。だから、次のようになります。
MOVIE LIST
------
1 Zoolander 2001 Comedy
2 Citizen Kane 1949 Drama
3 Psycho 1960 Horror
は、どのように私は、すべてのジャンルを検索することができますか?
複数の値を入れて
group_concat
を使用することができますか? – jarlh@jarlh私はそれを見ていますが、正直なところSQLの新機能はまだありません – Alex
一般的なGROUP BYルールは次のように言います: "GROUP BY句が指定されている場合、SELECTリストの各列参照は、セット関数の議論になります。 " (しかし、古いMySQLのバージョンは気にしませんが、新しいバージョンです!) – jarlh