gpt4 book ai didi

mysql - 从 tbl1.x = tbl2.x = tbl3.x 的多个表中选择/加入

转载 作者:搜寻专家 更新时间:2023-10-30 23:43:45 25 4
gpt4 key购买 nike

我有一个电影数据库,需要执行查询以返回由同一个人编写、导演和制作的所有电影。

我在 movies->producer、movies->directors 和 movies->writer 之间有多对多关系,称为 movie_director、movie_producer 和 movie_writer。这些表有一个指向名为 persons 的表的外键和一个指向 movies 表的外键。

如何选择一部且同一制片人、导演和编剧的电影?我试过这个 select 语句,但它返回了很多重复项:

SELECT movie_director.name
from movie_director,
movie_producer,
movie_writer
where movie_producer.name = movie_director.name = movie_writer.name;

创建 movie_director:

CREATE TABLE `movie_director` (
`title` VARCHAR(100) NOT NULL,
`year` int NOT NULL,
`name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`title`, `year`, `name`),
INDEX `fk_movies_has_directors_name_idx` (`name` ASC),
INDEX `fk_movies_has_directors_titleyear_idx` (`title` ASC, `year` ASC),
CONSTRAINT `fk_movies_has_directors_titleyear`
FOREIGN KEY (`title` , `year`)
REFERENCES `mdb`.`movies` (`title` , `year`)
ON DELETE cascade
ON UPDATE cascade,
CONSTRAINT `fk_movies_has_directors_name`
FOREIGN KEY (`name`)
REFERENCES `mdb`.`directors` (`name`)
ON DELETE cascade
ON UPDATE cascade)
ENGINE INNODB;

创建 movie_director:

CREATE TABLE `movie_producer` (
`title` VARCHAR(100) NOT NULL,
`year` int NOT NULL,
`name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`title`, `year`, `name`),
INDEX `fk_movies_has_producers_name_idx` (`name` ASC),
INDEX `fk_movies_has_producers_titleyear_idx` (`title` ASC, `year` ASC),
CONSTRAINT `fk_movies_has_producers_titleyear`
FOREIGN KEY (`title` , `year`)
REFERENCES `mdb`.`movies` (`title` , `year`)
ON DELETE cascade
ON UPDATE cascade,
CONSTRAINT `fk_movies_has_producers_name`
FOREIGN KEY (`name`)
REFERENCES `mdb`.`producers` (`name`)
ON DELETE cascade
ON UPDATE cascade)
ENGINE INNODB;

创建 movie_writer:

CREATE TABLE `movie_writer` (
`title` VARCHAR(100) NOT NULL,
`year` int NOT NULL,
`name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`title`, `year`, `name`),
INDEX `fk_movies_has_writers_name_idx` (`name` ASC),
INDEX `fk_movies_has_writers_titleyear_idx` (`title` ASC, `year` ASC),
CONSTRAINT `fk_movies_has_writers_titleyear`
FOREIGN KEY (`title` , `year`)
REFERENCES `mdb`.`movies` (`title` , `year`)
ON DELETE cascade
ON UPDATE cascade,
CONSTRAINT `fk_movies_has_writers_name`
FOREIGN KEY (`name`)
REFERENCES `mdb`.`writers` (`name`)
ON DELETE cascade
ON UPDATE cascade)
ENGINE INNODB;

感谢所有帮助或有用信息的链接!

最佳答案

首先,您需要将 movies 表与所有其他三个表连接起来,以查找任何电影的 producer、director 和 writer 的名称,以及然后您可以过滤所有字段名称相同的结果。

作为旁注,切勿使用旧式逗号分隔连接始终使用正确的 Inner Join 语法连接两个或多个表

SELECT     movie_director.NAME 
FROM movies m
INNER JOIN movie_director md
ON m.movieid = md.movieid
INNER JOIN movie_producer mp
ON m.movieid = mp.movieid movie_writer mw
ON m.movieid = mp.movieid
WHERE mp.NAME=md.NAME
AND mp.NAME=mw.NAME

关于mysql - 从 tbl1.x = tbl2.x = tbl3.x 的多个表中选择/加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31772064/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com