1

我已经阅读了大量的帖子、书籍、观看的视频等,但 SQL JOINS 对我来说从来没有任何意义...... =/

所以这是交易...

三张表:

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`  

但是,这只给了我对 SELECT 的需求 ID、标题和描述。……没用的

我有四个其他视图要创建,它们将是相同类型的查询。

任何帮助将不胜感激!

是否有任何免费程序可以查询我的架构并通过“向导”或其他方式运行我以指定我想要哪些表/列以及我想要选择哪些列并为我构建查询???也许我终于可以弄清楚是否可以使用这样的实用程序。

再次感谢!托德

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 回答