首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当在另一个表中使用部分元组时,不能删除关系表中的元组(但整个元组不在另一个表中)

当在另一个表中使用部分元组时,不能删除关系表中的元组(但整个元组不在另一个表中)
EN

Stack Overflow用户
提问于 2014-10-07 17:55:14
回答 1查看 688关注 0票数 0

我有四张桌子:

  1. 以studyLkup为主键的StudyID

  1. 以interviewerLkup为主键的InterviewerID

  1. 以StudyID和InterviewerID为主键的StudyID

  1. 参与者使用participantID作为主键,StudyID和InterviewerID作为外键引用studyLkup和studyInterviewers表。

如果面试官不在特定的研究中使用,我希望能够删除研究/面试官之间的关系。我不想把面试官从interviewerLkup表中删除,只是从studyInterviewers表中删除。

我遇到的问题是,如果面试官在参与者表中被使用(用于另一项研究),它不会让我删除学习/面试官之间的关系。

注意,我想删除一个特定的元组。我不想删除参与者表中没有使用的所有学习/面试官。我正在使用删除过程删除一个特定的面试官,这些面试官被错误地分配到了某项研究中。

有人能解释一下怎么做吗?

我未成功使用的php/mySql代码是:

代码语言:javascript
复制
    $sql1 = "DELETE FROM studyinterviewers
             WHERE (StudyID = '".$StudyID."')
                AND (InterviewerID = '".$InterviewerID."');";

下面给出了这个迷你模式的sql代码。是否正确设置了参与者表中的外键?

代码语言:javascript
复制
    CREATE TABLE IF NOT EXISTS `interviewcodes`.`studylkup` (
      `StudyID` INT(11) NOT NULL AUTO_INCREMENT,
      `StudyName` VARCHAR(45) NOT NULL,
      PRIMARY KEY (`StudyID`))
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8;

    CREATE TABLE IF NOT EXISTS `interviewcodes`.`interviewerlkup` (
      `InterviewerID` INT(11) NOT NULL AUTO_INCREMENT,
      `InterviewerFirstName` VARCHAR(45) NOT NULL,
      `InterviewerLastName` VARCHAR(45) NOT NULL,
      PRIMARY KEY (`InterviewerID`))
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8;

    CREATE TABLE IF NOT EXISTS `interviewcodes`.`studyinterviewers` (
      `StudyID` INT(11) NOT NULL,
      `InterviewerID` INT(11) NOT NULL,
      PRIMARY KEY (`StudyID`, `InterviewerID`),
      INDEX `fk_StudyInterviewers_InterviewerLkup1_idx` (`InterviewerID` ASC),
      CONSTRAINT `fk_StudyInterviewers_InterviewerLkup1`
        FOREIGN KEY (`InterviewerID`)
        REFERENCES `interviewcodes`.`interviewerlkup` (`InterviewerID`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_StudyInterviewers_StudyLkup1`
        FOREIGN KEY (`StudyID`)
        REFERENCES `interviewcodes`.`studylkup` (`StudyID`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8;

    CREATE TABLE IF NOT EXISTS `interviewcodes`.`participant` (
      `ParticipantID` INT(11) NOT NULL AUTO_INCREMENT,
      `ParticipantCaseID` VARCHAR(45) NOT NULL,
      `StudyID` INT(11) NOT NULL,
      `InterviewerID` INT(11) NOT NULL,
      PRIMARY KEY (`ParticipantID`),
      INDEX `fk_participant_studyinterviewers1_idx` (`InterviewerID` ASC),
      CONSTRAINT `fk_participant_studyinterviewers1`
        FOREIGN KEY (`InterviewerID`)
        REFERENCES `interviewcodes`.`studyinterviewers` (`InterviewerID`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_participant_studylkup1`
        FOREIGN KEY (`StudyID`)
        REFERENCES `interviewcodes`.`studylkup` (`StudyID`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    DEFAULT CHARACTER SET = utf8;
EN

回答 1

Stack Overflow用户

发布于 2014-10-07 17:59:45

可以使用内部联接从多个表中删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26242160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档