0

MySQL データベースに次のテーブルがあります。

CREATE TABLES Films (  
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),   
Title VARCHAR(255)),  

CREATE TABLE Genres (  
id INT NOT NULL AUTO_INCREMENT,   
PRIMARY KEY(id),  
Name VARCHAR(255))

CREATE TABLE Films_Genres (
film_id INT NOT NULL,  
genre_id INT NOT NULL,  
PRIMARY KEY (film_id,genre_id),  
FOREIGN KEY (film_id) REFERENCES Films(id) ON UPDATE CASCADE,  
FOREIGN KEY (genre_id) REFERENCES Genres(id) ON UPDATE CASCADE)";  

に保存されている特定のジャンルの映画を検索したい$genre。また、このジャンルの名前を選択したいと思います (理由は聞かないでください ;) )。私は最初の部分を行う方法を知っています。2番目の部分を達成しようとしJOINていますが、構文に問題があります:

SELECT * FROM Films WHERE id IN (    
SELECT film_id FROM Films_Genres  
WHERE genre_id IN SELECT id FROM Genres WHERE Name = '$genre'))  
JOIN Genres ON Name = '$genre'

エラーメッセージ:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'JOIN Genres ON Name = 'Action'' at line 1

4

1 に答える 1

0

次のように記述します。

SELECT * 
FROM Films 
JOIN Genres ON id = genre_id
WHERE id IN 
(    
   SELECT film_id 
   FROM Films_Genres  
   WHERE genre_id IN (SELECT id FROM Genres WHERE Name = '$genre')
)   
AND Name = '$genre';

JOINの後にする必要がありますFROM

または、これらの述語JOINの代わりに直接テーブルを作成できます。IN

SELECT * 
FROM Films AS f
INNER JOIN Films_Genres AS fg ON f.id = fg.film_id
INNER JOIN Genres       AS g  ON g.id = fg.genre_id

WHERE g.Name = '$genre'
于 2013-07-04T12:51:37.843 に答える