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

标签 mysql database database-design

这是用于电影在线商店的 mi 数据库的结构:

enter image description here

这些是创建它的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/

相关文章:

php - 通过php函数从mysql获取结果的问题

mysql - 如何使用mysql中的给定条件查询架构中所有表中的相同列?

database - 在 Windows 7 64 位上安装不完整的 mongodb

mysql - 检查电子邮件是否已存在于数据库中并添加/更改数据

mysql - 组织地址缓存

php - 我怎样才能自己加入一个表以获得每个唯一项目的第一个或最后一个?

java - 使用 Morphia Java 在每次更新时更新 mongo 中的 updated_at 属性

c# - 设计数据驱动的逻辑系统

database - 我应该使用数字还是电子邮件 ID 来识别网站上的用户?

mysql - 在终端中使用 mysql 来抑制警告消息,但密码是用 bash 脚本编写的