我的 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
存储的具有特定类型的电影。我还想选择这种类型的名称(不要问我为什么;))。我知道如何做第一部分。我试图用 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'
错误消息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 1 行“JOIN Genres ON Name = 'Action'”附近使用的正确语法
最佳答案
应该这样写:
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'
关于使用 JOIN 的 MySQL 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17470774/