Ich benutze kaum MySQL, also bin ich sehr neu dazu. Mein Endziel ist eine Liste, die ich in Java einfügen kann, die eine Film-ID, einen Filmnamen und eine Liste von Genres enthält. Ich versuche nur, eine SQL-Abfrage herauszufinden (damit ich die anderen Dinge später analysieren kann). Ich habe drei Tabellen:MySQL-Abfrage für Filme mit mehreren Genres unter Verwendung einer Zwischentabelle
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;
Können sagen, meine Tabellen die folgenden Werte haben:
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
Ich möchte die folgende Ausgabe mit meiner Anfrage:
MOVIE LIST
------
1 Zoolander 2001 Comedy
2 Citizen Kane 1949 Drama, Suspense
3 Psycho 1960 Horror, Romance, Suspense
ich diese Abfrage versucht:
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;
Aber es werde mir nur einen Genre-Namen geben. So sieht es so aus:
MOVIE LIST
------
1 Zoolander 2001 Comedy
2 Citizen Kane 1949 Drama
3 Psycho 1960 Horror
Wie kann ich alle Genres abrufen?
Sie Group_concat betrachtet haben? – jarlh
@jarlh Ich werde das nachschlagen, ich bin ehrlich gesagt noch sehr neu in SQL – Alex
Die allgemeine GROUP BY-Regel besagt: "Wenn eine GROUP BY-Klausel angegeben ist, muss jede Spaltenreferenz in der SELECT-Liste entweder eine Gruppierungsspalte oder angeben sei das Argument einer gesetzten Funktion. " (Ältere MySQL-Versionen sind jedoch egal, aber neuere tun!) – jarlh