2013-01-16 103 views
2

首先我想道歉以防这是一个已知和回答的问题,但英语不是我的母语,我不知道如何甚至搜索这样的问题。所以在这里。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 
+0

有这样的问题,总是提供样本记录与期望的结果':D'欢迎计算器! –

+0

特别展示你的电影之间的关系,导演表:) – bonCodigo

回答

1

在你被简单地命名为编剧或制片人选择查询添加列。

SELECT .... , 'Writer' AS Type 
UNION ALL 
SELECT .... , 'Producer' AS Type 

当您为我提供完整的表结构时,如果您愿意,我可以为您提供整个查询。

+0

消息编辑 表结构提供(我认为) – Silas

+0

OOhhhh ......明白了。谢谢。我不想这样做。 但我仍然不知道设计我最终是否足够不好。 – Silas