gpt4 book ai didi

sql - 如何使用通过自身联接检索到的数据来更新表?

转载 作者:行者123 更新时间:2023-12-02 11:51:57 24 4
gpt4 key购买 nike

我有以下数据:

SectorKey Sector foo  
1 A null
2 B null
... ... ...
1 null a
2 null b
2 null c
1 null d
2 null e
... ... ...

我想根据sectorKey的值更新Sector列为空时的值,即当SectorKey为1时我希望Sector为'A',当SectorKey为2时我希望Sector为'B'

我尝试过这个查询:

update tbFoo
set Sector=A.sector
from tbFoo A INNER JOIN tbFoo B
ON A.SectorKey=B.SectorKey
and A.Sector is not null
and B.Sector is null

并收到此错误消息:

The table 'tbFoo' is ambiguous.

我尝试为第一个 tbFoo 起别名,但它似乎不是有效的语法。我不明白为什么 SQLServer 会提示命名不明确,因为我已经为所有表起了别名。

我找到了this thread ,我觉得我正在做与赞成答案中完全相同的事情。我还尝试了接受的答案中建议的查询:

    update tbFoo A
set Sector =
(select Sector from tbFoo
where A.SectorKey=SectorKey and Sector is not null)

然后 SQLServer 提示“A”附近的语法不正确

对于可能发生的情况以及解决这个问题有什么想法吗?我正在使用 SQLServer 2008。

编辑 我没有显示表格的总数据。我不仅有两个案例(A 和 B),而是有几千个案例。所以明确的情况不是一个选择

最佳答案

在更新查询的第一部分使用别名:

update B
set Sector=A.sector
from tbFoo A INNER JOIN tbFoo B
ON A.SectorKey=B.SectorKey
and A.Sector is not null
and B.Sector is null

否则它不知道要更新表的哪个实例。

关于sql - 如何使用通过自身联接检索到的数据来更新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/725684/

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