Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:数据库的查询不正确或结构不正确?_Mysql_Database_Database Design - Fatal编程技术网

MySQL:数据库的查询不正确或结构不正确?

MySQL:数据库的查询不正确或结构不正确?,mysql,database,database-design,Mysql,Database,Database Design,这是电影在线商店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 NUL

这是电影在线商店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 `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;
电影\u慷慨

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;
例如,我想展示属于“动作”类型的电影:

但它显示了超过1200个结果!!,ie将电影表中托管的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';

结构很完美,只需使用此查询

 SELECT nom_movie FROM movies, genres, movie_genre WHERE genres.nom_genre = 'action' AND genres.id_genre= movie_genre.id_genre AND movie_genre.id_movie=movies.id_movie ;

您误判了加入表的条件在他的模式中,
流派
中没有
id\u电影
,因此您必须通过
id\u流派
加入
流派
电影流派
。很好。。。。为我工作:)。。我忘记了表格之间的联合,所有答案显示相同的结果,但你的结构更好!!谢谢你,你的解决方案对我有用:)但是这句话更结构化@llionYou是受欢迎的,我给了你内联代码bc,它在编程时更容易使用@尽管+1谢谢,你的解决方案对我有效:),但这句话的结构更为清晰