Sql 从具有相同表外键约束的表中删除

Sql 从具有相同表外键约束的表中删除,sql,foreign-keys,constraints,sql-delete,Sql,Foreign Keys,Constraints,Sql Delete,我正在尝试运行以下sql server语句: delete C from Company C, Company D where C.CompanyID > 1310 AND C.CompanyID != D.ParentID DELETE FROM myTable WHERE (other criteria...) 我收到以下sql错误: DELETE语句与相同的表引用约束“FK_Company_Company”冲突。冲突发生在数据库“DevelopmentDB”、表“dbo.Comp

我正在尝试运行以下sql server语句:

delete C from Company C, Company D where C.CompanyID > 1310 AND C.CompanyID != D.ParentID
DELETE FROM myTable
WHERE (other criteria...)
我收到以下sql错误:

DELETE语句与相同的表引用约束“FK_Company_Company”冲突。冲突发生在数据库“DevelopmentDB”、表“dbo.Company”、列“ParentID”中


我检查过,没有ParentID=CompanyID的公司。我很好奇为什么我的delete语句没有过滤掉那些会导致这个约束被打破的公司

您是否用类似的方法验证了尝试的结果,以确保您尝试删除的内容是您实际打算删除的内容

select C.<field list> from Company C, Company D 
where C.CompanyID > 1310 AND C.CompanyID != D.ParentID
在我有一个包含列和数据的表的情况下,我遇到了这个错误(“DELETE语句与同一个表引用约束冲突…”):

| RecordID | ParentRecordID | (other fields...) |
|----------|----------------|-------------------|
|        1 |           null |               ... |   
|        2 |              1 |               ... |
当我的DELETE命令尝试在记录2之前删除记录1时,出现了错误。在列
ParentRecordID
上设置的指向列
RecordID
的表外键约束阻止了删除:当记录1不再存在时,记录2指向记录1是无效的

我通过首先删除具有非空
ParentRecordID
值的记录来解决此问题:

DELETE FROM myTable
WHERE ParentRecordID IS NOT null
  AND (other criteria...)
然后,我可以使用一个附加的delete语句继续删除剩余的记录:

delete C from Company C, Company D where C.CompanyID > 1310 AND C.CompanyID != D.ParentID
DELETE FROM myTable
WHERE (other criteria...)

你写的第二个查询我得到了0行,这让我很困惑。如果是这种情况,那么约束就不会成为问题,0行将受到影响。零行意味着任何大于1310的companyid都有同样是parentID的companyid。您可以在不使用子查询的情况下尝试select语句来验证companyid大于1310的存在。您是否可以使用我们在这里讨论的特定sql风格更新您的问题。TSQL、PLSQL、Postgres等等。我认为如果有多重继承权,这是行不通的。