SQl从多个表中删除

时间:2009-04-11 12:43:36

标签: sql join

说,我有两个表课程和faculty_courses - 每个都有一个主键course_ID,即varchar(50)不为空。

我正在尝试从Courses表中删除一行 - 所以假设必须从两个表中删除该行,因为它们是通过关系链接的。

我写了这个 - 不起作用 - 说关键字'JOIN'

附近的语法不正确

DELETE 来自课程JOIN faculty_courses ON Courses.course_ID = faculty_courses.course_ID WHERE faculty_courses.course_ID ='ITM731'

有什么想法吗?

5 个答案:

答案 0 :(得分:6)

你必须发表两个声明。

DELETE Courses where course_ID = 'ITM731'
DELETE faculty_courses WHERE course_ID = 'ITM731'

或者,如此处所述,使用删除级联。

答案 1 :(得分:2)

您可以通过表之间的ON DELETE CASCADE链接来处理您想要的内容。 只要您的RDBMS允许这样做。

答案 2 :(得分:2)

您可以创建FK reference with CASCADE Delete

修改

我建议您使用Ocedecio的方法明确删除两个表而不是级联。它使你的意图更加清晰。

答案 3 :(得分:0)

DELETE只删除一个表中的记录 - JOIN语法仅用于选择该表上的正确行,例如,在具有1:n关系的表上(不是您在此处拥有的)和您想要删除“n”表中与“1”表上的可选记录相关的所有记录,然后你会DELETE FROM ntable INNER JOIN reftable ON ntable.ref = reftable.ref WHERE reftable.column = 'whatyouneedtolookup'

正如我所说,这与您目前的情况无关,您只需要在同一个密钥上发出两个DELETE语句 - 每个表一个。

话虽这么说,听起来你在表之间有一个1:1的引用,这对我来说很奇怪 - 通常用这种引用,琐碎的规范化将把表合并到一个表中两张桌子。

答案 4 :(得分:-2)

alter table tablename drop column columnname