gpt4 book ai didi

sql - 如何解决 SQL 中需要在 2 个表之间来回移动的递归情况?

转载 作者:行者123 更新时间:2023-12-02 04:36:08 25 4
gpt4 key购买 nike

我有 2 个表。

  1. 总承包商
  2. 合作伙伴

每个 GeneralContractor 在合作伙伴表中都有其合作伙伴,每个合作伙伴都与总承包商相关联。两个表都有针对每个记录的 IsBlackList,这意味着如果我将 GC 中的一个总承包商列入黑名单,那么它的所有合作伙伴也将被列入黑名单,当一个合作伙伴被列入黑名单时,每个合作伙伴的总承包商也会被列入黑名单,如果该总承包商有它是自己的合作伙伴,那么它也会将该合作伙伴列入黑名单。所以这是一种在合作伙伴和总承包商表之间来回递归的情况。我已经尽力而为,并以某种方式取得了成就,但并不完全。请帮助我。

代码:

ALTER PROC  [dbo].[UpdateContractorsBlackList]

@GContractorID varchar(20),
@BlackList bit

AS
BEGIN

Begin Try
Begin Transaction

Update GeneralContractors
set IsBlackList= @BlackList
Where GeneralContractorID= @GContractorID

Update Partners
Set IsBlackList= @BlackList
Where GeneralContractor_ID= @GContractorID

Commit Transaction

End Try

这是我能做的代码,但我不知道还能做什么。

GC表:

enter image description here

合作伙伴表:

enter image description here

简而言之:

简而言之,如果我将一个 GC 列入黑名单,那么它会将所有关联的合作伙伴列入黑名单,并且对于每个合作伙伴,它会检查它在 GC 表中是否有关联的记录,然后它也会将其列入黑名单,然后对于 GC 中的每条记录,它会将关联的合作伙伴列入黑名单。

更新:

从合作伙伴的角度来看更多的代码。

 Update Partners
Set IsBlackList= @BlackList
Where CNIC= @CNIC

Update gc
Set gc.IsBlackList= @BlackList
From GeneralContractors gc
Inner Join Partners p
ON p.GeneralContractor_ID= gc.GeneralContractorID
Where p.CNIC= @CNIC

最佳答案

我建议您通过添加诸如停止条件或递归级别之类的内容来修改递归。否则,根据承包商/合作伙伴链接因素,您最终可能会将数据库中的所有记录列入黑名单。

关于sql - 如何解决 SQL 中需要在 2 个表之间来回移动的递归情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42414672/

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