我读过很多帖子、书籍、视频等等,但是SQL连接对我来说毫无意义。。。=/
所以这就是交易。。。
三张桌子:

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;

有些功能可能有多个需求,有些功能将有相同的需求(即,相同的需求适用于多个功能),因此,多对多关系的第三个表。
我想能够选择一个特定功能的所有需求(按功能id),我正在尝试将其变成一个视图。
在收到许多关于“未知列”和“非唯一别名”的错误消息之后,我终于开始使用这个:
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`

但是,这只给了我要从中选择的需求id、标题和描述。
……这没用
我还有四个视图要创建,它们将是相同类型的查询。
任何帮助都将不胜感激!
是否有任何免费程序可以查询我的模式并通过“向导”或其他方式运行我,以指定我需要哪些表/列以及我要选择哪些列并为我生成查询??? 也许我最终能弄清楚是否可以用这样的工具玩。
再次感谢!
托德

最佳答案

这应该对您有用,但是您应该在数据库中处理命名约定。在同一个查询中有多个名为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

关于mysql - 来自三个表的MySQL View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10727804/

10-13 04:14