首先我想道歉以防这是一个已知和回答的问题,但英语不是我的母语,我不知道如何甚至搜索这样的问题。所以在这里。SQL查询和结果
我有一个名为电影的表。此表包含关于电影的信息。电影的导演和作家也是我的商店信息。但是导演和作家都是多值属性。作为多值,他们应该被存储在新的表格中,但是那些表格将与电影表格有多对多的关系,所以我制作了四张新的表格。
总监 - >导演 - >电影 作家 - >写 - >电影
[导演]和[作家]持有的名字lastanames和ID为关键属性。 [定向],[写道]保存导演和作家表格的ID键以及电影表中的键。
当我问导演(S)和作家(S)的名称为特定的影片(其中有3名董事及2个作家),结果我得到的是像::
D.Name D.Lastname W.Name W.Lastname
----------------------------------------------
Jan Kounen Stanley Kubric
Albert Hughes Stanley Kubric
Len Wiseman Stanley Kubric
Jan Kounen Alan Moore
Albert Hughes Alan Moore
Len Wiseman Alan Moore
如果我使用联合查询我可以得到我想要的五个名字,但不能以某种方式理解谁是导演,谁是作家。
Jan Kounen
Albert Hughes
Len Wiseman
Stanley Kubric
Alan Moore
但都列为导演。
所以我的问题是,我的设计是否有缺陷?我的查询错误了吗?有没有办法让董事和作家在没有多个回复的情况下使用一个查询?
预先感谢您。
编辑::::
谢谢大家的回复。
我试图上传一个图像的关系,但它不会让我。 因此,这里是有问题
CREATE TABLE IF NOT EXISTS `Red_Apple_storeDB`.`directed_by` (`Direc_id` INT(11) NOT NULL ,
`Db_Title` VARCHAR(50) NOT NULL ,
PRIMARY KEY (`Direc_id`, `Db_Title`) ,
INDEX `fk_Director_has_Movie_Movie1_idx` (`Db_Title` ASC) ,
INDEX `fk_Director_has_Movie_Director1_idx` (`Direc_id` ASC) ,
CONSTRAINT `fk_Director_has_Movie_Director1`
FOREIGN KEY (`Direc_id`)
REFERENCES `Red_Apple_storeDB`.`director` (`D_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Director_has_Movie_Movie1`
FOREIGN KEY (`Db_Title`)
REFERENCES `Red_Apple_storeDB`.`movie` (`MV_Title`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE IF NOT EXISTS `Red_Apple_storeDB`.`director` (`D_Name` VARCHAR(50) NOT NULL ,
`D_lastname` VARCHAR(45) NOT NULL ,
`D_id` INT(11) NOT NULL ,
PRIMARY KEY (`D_id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE IF NOT EXISTS `Red_Apple_storeDB`.`movie` (`MV_Title` VARCHAR(50) NOT NULL ,
`MV_Release_Date` DATE NOT NULL ,
`MV_Cost` BIGINT(20) NOT NULL ,
`St_Name` VARCHAR(50) NOT NULL ,
PRIMARY KEY (`MV_Title`) ,
INDEX `fk_Movie_Studio1_idx` (`St_Name` ASC) ,
CONSTRAINT `fk_Movie_Studio1`
FOREIGN KEY (`St_Name`)
REFERENCES `Red_Apple_storeDB`.`studio` (`ST_Name`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE IF NOT EXISTS `Red_Apple_storeDB`.`writen_by` (`Writ_id` VARCHAR(45) NOT NULL ,
`Wb_Title` VARCHAR(50) NOT NULL ,
PRIMARY KEY (`Writ_id`, `Wb_Title`) ,
INDEX `fk_Writer_has_movie_movie1_idx` (`Wb_Title` ASC) ,
INDEX `fk_Writer_has_movie_Writer1_idx` (`Writ_id` ASC) ,
CONSTRAINT `fk_Writer_has_movie_Writer1`
FOREIGN KEY (`Writ_id`)
REFERENCES `Red_Apple_storeDB`.`writer` (`W_id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Writer_has_movie_movie1`
FOREIGN KEY (`Wb_Title`)
REFERENCES `Red_Apple_storeDB`.`movie` (`MV_Title`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE IF NOT EXISTS `Red_Apple_storeDB`.`writer` (`W_Name` VARCHAR(50) NOT NULL ,
`W_Lastname` VARCHAR(45) NULL DEFAULT NULL ,
`W_id` VARCHAR(45) NOT NULL ,
PRIMARY KEY (`W_id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1
的一个电影我询问表的代码中,有3名董事和2个作家。
我的查询::
select d_name, d_lastname,d_id
from director, movie,directed_by
where mv_title = 'from hell'
and mv_title = db_title
and direc_id = d_id
union all
select w_name, w_lastname,w_id
from movie, writer, writen_by
where mv_title = 'from hell'
and mv_title = wb_title
and writ_id = w_id
有这样的问题,总是提供样本记录与期望的结果':D'欢迎计算器! –
特别展示你的电影之间的关系,导演表:) – bonCodigo