2013-01-16 104 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