从多个表中删除所有相关记录

9

我有一个调查表格,想要删除与特定调查相关的所有记录。

我的表格:

_______________     _______________     ___________  ________________
|_tblSurvey___|     |_tblAnswers___|    |_tblAlt__|  |_tblQuestions_|
| surveyID    |     | answerAltID  |    | altID   |  | questID      |
| surveyName  |     | userID       |    | altText |  | questText    |
|_____________|     |______________|    |_questID_|  |_surveyID_____|

假设我想删除所有与调查ID 1 相关的记录。
我尝试了以下操作:
DELETE 
 * 
FROM tblSurvey, tblQuestions, tblAlt, tblAnswers
WHERE tblSurvey.surveyID = 1 
AND tblsurvey.surveyID = tblQuestions.surveyID
AND tblQuestions.questID = tblAlt.questID
AND tblAlt.altID = tblAnswers.answerAltID

你的表叫做'tblQuestion'还是'tblQuestions'? - Mark Byers
2个回答

12

有两种方法:

  • 使用 ON DELETE CASCADE 设置外键约束。
  • 使用多表格的 DELETE 语句。

尝试这个:

DELETE tblSurvey, tblQuestion, tblAlt, tblAnswers 
FROM tblSurvey
JOIN tblQuestion ON tblsurvey.surveyID = tblQuestion.surveyID
JOIN tblAlt ON tblQuestions.questID = tblAlt.questID
JOIN tblAnswers ON tblAlt.altID = tblAnswers.answerAltID 
WHERE tblSurvey.surveyID = 1          

3
这个查询不起作用,我认为它应该写成:DELETE * FROM ... 对吗?或者我错了? - FidoBoy
谢谢,MySQL 5.7版本中使用JOIN无效,有什么想法吗? - Jay

3
如果您的表具有外键引用,您可以使用 ON DELETE CASCADE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接