2

最初に、これが既知の回答済みの質問である場合に謝罪したいと思いますが、英語は私の母国語ではなく、そのような質問を検索する方法さえわかりません。だからここに行きます。

movie という名前のテーブルがあります。このテーブルには、映画に関する情報が保持されます。映画の監督と作家も、私が保存する情報の中にあります. ただし、ディレクターとライターはどちらも多値属性です。多値として新しいテーブルに格納する必要がありますが、それらのテーブルは映画テーブルと多対多の関係を持つため、4 つの新しいテーブルを作成しました。

監督→監督→MOVIE ライター→脚本→MOVIE

[ディレクター] と [ライター] は名前 lastanames と Id をキー属性として保持します。[監督]、[執筆] は、ディレクターとライターのテーブルからの ID キーと、映画のテーブルからのキーを保持します。

特定の映画(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

ユニオンクエリを使用すると、必要な5つの名前だけを取得できますが、誰が監督で誰が作家であるかを理解できる方法ではありません.

Jan     Kounen  
Albert  Hughes  
Len     Wiseman 
Stanley Kubric  
Alan    Moore   

しかし、すべて取締役としてリストされています。

私の質問は、私の設計に欠陥がありますか? 私のクエリは間違っていますか?複数の応答なしに 1 つのクエリでディレクターとライターを取得する方法はありますか?

前もって感謝します。

編集::::

返信ありがとうございます。

関係の画像をアップロードしようとしましたが、許可されませんでした。問題のテーブルのコードは次のとおりです

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
4

1 に答える 1

1

単に Writer または Producer という名前の列を選択クエリに追加します。

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

完全なテーブル構造を提供していただければ、必要に応じてクエリ全体を提供できます。

于 2013-01-16T15:10:03.613 に答える