这是用于电影在线商店的 mi 数据库的结构:
这些是创建它的sql语句
电影
CREATE TABLE `movies` (
`id_movie` varchar(4) NOT NULL default '',
`nom_movie` varchar(30) default NULL,
`detall_movie` text,
`precio_movie` varchar(6) default NULL,
`img_rut_movie` varchar(50) default NULL,
PRIMARY KEY (`id_movie`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
慷慨
CREATE TABLE `genres` (
`id_genre` varchar(3) collate utf8_bin NOT NULL default '',
`nom_genre` varchar(20) collate utf8_bin default NULL,
PRIMARY KEY (`id_genero`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
movie_genero
CREATE TABLE `movie_genre` (
`id_movie` varchar(4) collate utf8_bin default NULL,
`id_genre` varchar(3) collate utf8_bin default NULL,
FOREIGN KEY(id_movie) REFERENCES movies(id_movie),
FOREIGN KEY(id_genero) REFERENCES generos(id_genero)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
例如,我想展示属于“ Action ”类型的电影:
SELECT nom_movie FROM movies, genres, movie_genre WHERE genres.nom_genre = 'action';
但它显示了超过 1200 个结果!!,即重复 movies 表中托管的 36 部电影 36 次。
希望对你有所帮助!!
最佳答案
即使使用 Distinct 查询也是低效的。我建议适当的内部连接。应该这样做:
select
m.nom_movie
FROM
movies
inner join
movie_genre mg
on
m.id_movie=mg.id_movie
inner join
genres g
on
mg.id_genre=g.id_genre
where
g.nom_genre = 'action';
关于MySQL:数据库查询不正确或结构错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10955235/