这是电影在线商店的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;

电影大度
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;

例如,我想展示属于“动作”类型的电影:
SELECT nom_movie FROM movies, genres, movie_genre WHERE genres.nom_genre = 'action';

但它显示了超过1200个结果!!,ie将movies表中的36部电影重复36次。
我希望你能帮忙!啊!

最佳答案

即使有一个明显的,这是一个低效的查询。我建议一个适当的内部连接。这应该做到:

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 - MySQL:错误的查询或错误的数据库结构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10955235/

10-12 04:23