1

私はたくさんの投稿、本、視聴したビデオなどを読みましたが、SQL JOINS はまったく意味がありませんでした... =/

それで、これが契約です...

3 つのテーブル:

CREATE TABLE IF NOT EXISTS `feature` (  
  `feature_id` INT NOT NULL AUTO_INCREMENT ,  
  `title` VARCHAR(45) NOT NULL ,  
  `description` TEXT NOT NULL ,  
  PRIMARY KEY (`feature_id`) )  
ENGINE = InnoDB;  

CREATE TABLE IF NOT EXISTS `requirement` (  
  `requirement_id` INT NOT NULL AUTO_INCREMENT ,  
  `title` VARCHAR(45) NOT NULL ,  
  `description` TEXT NOT NULL ,  
  PRIMARY KEY (`requirement_id`) ,  
  UNIQUE INDEX `title_UNIQUE` (`title` ASC) )  
ENGINE = InnoDB;  

CREATE TABLE IF NOT EXISTS `feature_requirement` (  
  `fk_feature_id` INT NOT NULL ,  
  `fk_requirement_id` INT NOT NULL ,  
  PRIMARY KEY (`fk_feature_id`, `fk_requirement_id`) ,  
  INDEX `fk_feature_requirement_requirement1` (`fk_requirement_id` ASC) ,  
  INDEX `fk_feature_requirement_feature1` (`fk_feature_id` ASC) )  
ENGINE = InnoDB;  

一部の機能には複数の要件があり、一部の機能には同じ要件があります (つまり、同じ要件が複数の機能に適用されます)。

特定の機能のすべての要件を (feature_id で) 選択できるようにしたいので、これを VIEW にしようとしています。

「不明な列」および「一意でないエイリアス」に関する多くのエラー メッセージの後。私はついにこれを機能させました:

CREATE VIEW `project_feature_requirement` AS  
SELECT r.*  
FROM `requirement` `r`  
INNER JOIN `feature_requirement` `fr`  
    on `r`.`requirement_id` = `fr`.`fk_requirement_id`  
INNER JOIN `feature` `f`  
    on `fr`.`fk_feature_id` = `f`.`feature_id`  

ただし、それはrequirement_id、title、および説明をSELECTするだけです。...これは役に立たない

同じタイプのクエリになるように、他に 4 つの VIEW を作成する必要があります。

どんな助けでも大歓迎です!

私のスキーマをクエリし、「ウィザード」または何かを実行して、必要なテーブル/列と選択したい列を指定してクエリを作成する無料のプログラムはありますか??? そのようなユーティリティで遊ぶことができれば、最終的にそれを理解できるかもしれません。

再度、感謝します!トッド

4

1 に答える 1

1

これでうまくいくはずですが、データベース内の命名規則に取り組む必要があります。title という名前の複数のフィールドを同じクエリに含めると、不必要に混乱する可能性があります。

CREATE VIEW `project_feature_requirement` AS  
    SELECT r.*, f.feature_id, f.title as ftitle, f.description as fdesc  
    FROM `requirement` `r`  
    INNER JOIN `feature_requirement` `fr`  
        on `r`.`requirement_id` = `fr`.`fk_requirement_id`  
    INNER JOIN `feature` `f`  
        on `fr`.`fk_feature_id` = `f`.`feature_id`

これは、クエリを作成するためのより明確でエラーが発生しにくい方法である可能性があります。

SELECT r.*, f.feature_id, f.title as ftitle, f.description as fdesc  
FROM feature_requirement fr 
JOIN requirement r ON r.requirement_id=fr.fk_requirement_id
JOIN feature f on f.feature_id=fr.fk_feature_id
于 2012-05-23T21:09:49.603 に答える