首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从表中删除外键到其他表

从表中删除外键到其他表
EN

Stack Overflow用户
提问于 2013-08-13 16:10:55
回答 4查看 318关注 0票数 0

我试图从一个具有foreign key引用的表(foreign key)中删除,该表将其链接到其他4个表。

我需要删除Table1Table2引用的所有数据,而不是Table3Table4引用的所有数据。我已经删除了Table1Table2中的数据

我试过这样的方法:

代码语言:javascript
运行
复制
delete from MyTable where ID NOT IN(SELECT MyTableID FROM Table1)
delete from MyTable where ID NOT IN(SELECT MyTableID FROM Table2)

但是它显然不起作用,因为如果这样做,它会无意中删除Table2引用的数据。

是否有办法从某个表中删除FKs未被某些表引用的表?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-13 16:17:08

(在进行了一些基础研究并找到Server中的DELETE语句之后,重写了Server语法的答案。)

使用DELETE语句的多个表语法。

代码语言:javascript
运行
复制
DELETE
  MyTable
FROM
  MyTable
  LEFT JOIN Table1 ON MyTable.ID = Table1.MyTableID
  LEFT JOIN Table2 ON MyTable.ID = Table2.MyTableID
  LEFT JOIN Table3 ON MyTable.ID = Table3.MyTableID
  LEFT JOIN Table4 ON MyTable.ID = Table4.MyTableID
WHERE
  (Table1.MyTableID IS NOT NULL OR Table2.MyTableID IS NOT NULL)
  AND Table3.MyTableID IS NULL
  AND Table4.MyTableID IS NULL

DELETE将只在FROM子句之前的表上操作。您可以使用FROM子句中不受影响的其他表来选择行。此示例将MyTable与您提到的所有表连接起来,然后检查Table1Table2所引用的行以及Table3Table4不引用该行的每一行。

票数 2
EN

Stack Overflow用户

发布于 2013-08-13 16:25:52

可能不太有效,但下面的方法应该有效。

它应该“删除MyTable中由Table1和Table2引用的所有数据,而不是Table3和Table4”。您的查询似乎与希望这样做的愿望不完全匹配。

代码语言:javascript
运行
复制
DELETE FROM MyTable
WHERE
  ID IN (SELECT MyTableID FROM Table1) AND
  ID IN (SELECT MyTableID FROM Table2) AND
  ID NOT IN (SELECT MyTableID FROM Table3) AND
  ID NOT IN (SELECT MyTableID FROM Table4)
票数 0
EN

Stack Overflow用户

发布于 2013-08-13 16:31:32

这是@ThomaCreemers的转换到SQL Server语法。

代码语言:javascript
运行
复制
DELETE MyTable
FROM MyTable
  LEFT JOIN Table1 ON MyTable.ID = Table1.MyTableID
  LEFT JOIN Table2 ON MyTable.ID = Table2.MyTableID
  LEFT JOIN Table3 ON MyTable.ID = Table3.MyTableID
  LEFT JOIN Table4 ON MyTable.ID = Table4.MyTableID
WHERE
  (Table1.MyTableID IS NOT NULL OR Table2.MyTableID IS NOT NULL)
  AND Table3.MyTableID IS NULL
  AND Table4.MyTableID IS NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18214070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档