从相关表中删除SQL

Bry*_*yan 2 sql delete-row

我试图删除与问题表和关系表中的测验ID匹配的所有记录.该查询适用于select语句,但不允许删除相同的语句.

@quizId是我传递到我的存储过程的测验ID值.有谁知道如何使用一个语句从两个表中删除?可能吗?

DELETE tGeoQuestions as a, tGeoQuizToQuestion as b WHERE b.quizId = @quizId AND a.id = b.questionid
Run Code Online (Sandbox Code Playgroud)

SQL*_*ace 8

您需要启用级联删除然后它会自动发生,您只需要从PK中删除表,所有fk表将自动删除

否则它是一个两步操作

像这样的东西,把它放在一个tran

DELETE a 
FROM tGeoQuestions as a
JOIN tGeoQuizToQuestion as b 
ON a.id = b.questionid
AND b.quizId = @quizId


DELETE tGeoQuizToQuestion  WHERE quizId = @quizId 
Run Code Online (Sandbox Code Playgroud)

你的第三个选项是PK表上的触发器,如果​​它在PK表中被删除,它将删除FK表中的所有内容...我不推荐触发器

  • 就像汤姆在下面警告一样,谨慎使用级联,因为你会突然发现数据"丢失" (3认同)