gpt4 book ai didi

sql-server - 在 SQL 数据库中,当匹配的 id 已从 Table_A 中删除时,如何从 Table_B 中删除记录?

转载 作者:行者123 更新时间:2023-12-02 00:07:05 25 4
gpt4 key购买 nike

我有两个表Table_ATable_B,其中Table_B.IX_Id = Table_A.IX_ID。这些表中的记录如下所示:

查询:

   select * from Table_A where IX_ID = 4783 
select * from Table_B where IX_Id = 4783

结果:

Table_A result

IX_ID IX_ParentID IX_CreationDate
----------- -------------------- --------------------
4783 0 2015-01-26 10:23:00

Table_B result

IX_Id Row_Id Document_Id
----------- ----------- -----------
4783 1 101
4783 1 99
4783 1 94

现在假设我从 Table_A 中删除了一条记录,其 4783 超出了我想要的记录,同时也从 Table_B 中删除了 id 为 4783 的记录。

我可以通过以下查询从Table_A中获取已删除的记录:

查询:

;WITH Missing (missnum, maxid)
AS
(
SELECT 1 AS missnum, (select max(IX_ID) from Table_A)
UNION ALL
SELECT missnum + 1, maxid FROM Missing
WHERE missnum < maxid
)
SELECT missnum
FROM Missing
LEFT OUTER JOIN Table_A missingIds on missingIds.IX_ID = Missing.missnum
WHERE missingIds.IX_ID is NULL order by 1 desc
OPTION (MAXRECURSION 0);

结果:

missnum
-----------
4783

预期结果:

检查Table_B中是否存在missnum,然后从Table_B中删除那些匹配的记录,否则不删除。我怎样才能实现这个目标?

注意:我从 Table_A 中删除了很多记录,并且正在 Table_B 中进行调整,其中相应的记录有数百个。

最佳答案

您可以使用NOT IN查找与子查询不匹配的内容,这要简单得多,并且查询优化器有更好的机会选择高性能的内容

DELETE FROM Table_B
WHERE IX_Id NOT IN (SELECT IX_Id FROM Table_A)

如果您想让 Table_B 中的 IX_Id 与 Table_A 保持一致,我同意 Will 关于外键的评论

关于sql-server - 在 SQL 数据库中,当匹配的 id 已从 Table_A 中删除时,如何从 Table_B 中删除记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28154515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com