【发布时间】:2015-08-02 12:51:28
【问题描述】:
我有一个电影数据库,需要执行一个查询,返回由同一个人编写、导演和制作的所有电影。
我在电影->制片人、电影->导演和电影->作家之间有多对多的关系,称为movie_director、movie_producer和movie_writer。这些表有一个外键指向名为 people 的表和一个指向 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;
感谢所有帮助或指向有用信息的链接!
【问题讨论】:
-
选择
distinct... -
也使用显式连接
-
这 3 个表格中的电影是如何识别的?
-
电影表使用标题和年份标识。这 3 个表格引用了电影的标题和年份。
-
只需发布带有
show create table xxxx的架构即可。不要手写或描述它。提出一个质量问题
标签: mysql sql database relational-database