我在DELETE语句中遗漏了什么

时间:2015-04-05 21:24:51

标签: sql-delete

以下是我遇到问题的问题:

编写一个DELETE语句,删除类别表中ID为44444的行。执行此语句时,由于该类别在Products表中具有相关行,因此会产生错误。要解决此问题,请在DELETE语句之前添加另一个删除此类别中所有产品的DELETE语句。

我不知道为什么我一直收到此错误消息:

  

DELETE语句与REFERENCE约束冲突   “FK__Products__Catego__145C0A3F”。冲突发生在数据库中   “MyGuitarShop”,表“dbo.Products”,列'CategoryID'。

这是我的SQL语句:

DELETE Categories
FROM Categories JOIN Products
    ON Categories.CategoryID = Products.CategoryID
WHERE Categories.CategoryID = 44444;

我一直在研究这个问题已经有一段时间了,我无法弄清楚我做错了什么,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

您必须先删除产品,然后才能删除该类别。由于外键约束,您有错误。 因此我会写2个查询:

DELETE FROM Products WHERE CategoryID = 44444;

现在由于没有具有此ID的产品,因此可以删除该类别:

DELETE FROM Categories WHERE CategoryID = 44444;

答案 1 :(得分:0)

我知道在Postgres中至少可以使用级联修饰符来删除相关的行。

DELETE FROM Categories WHERE CategoryID = 44444 CASCADE;