如何使用表 B 中的信息更新表 A 中的列 [重复]
Posted
技术标签:
【中文标题】如何使用表 B 中的信息更新表 A 中的列 [重复]【英文标题】:How do I update a col in table A, using info From table B [duplicate] 【发布时间】:2014-07-17 17:57:07 【问题描述】:我使用的是 Microsoft SQL Server 2005
我有两张桌子,比如说TableA
和TableB
CREATE TABLE TableA (
A_ItemNumber (int)
A_IsDeleted (bit)
)
CREATE TABLE TableB (
B_ItemNumber (int)
B_OrderNumber (varchar)
)
INSERT INTO TableB VALUES
(1, 'XY004005'),
(2, 'XY005125'),
(3, 'XY499999'),
(4, 'XY511340')
我需要编写一个执行以下操作的更新查询:
获取所有 B_OrderNumbers
的 B_ItemNumber
,其中字符串的 int 部分 XY004005 将包含在 004005 < 500000
之后,但 XY511340
不会)
将此商品编号用于UPDATE A_IsDeleted WHERE A_ItemNumber = B_ItemNumber
我基本上想将所有A_ItemNumber = B_ItemNumber where B_OrderNumber < XY500000
的A_IsDeleted
更改为TRUE
我认为这可能是一个简单的加入/更新,但看起来不允许这样做。
【问题讨论】:
我确实看到了那个答案。我会再读一遍。感谢设计这个数据库的人,我也有字符串应该有整数,所以我会挖掘更多,看看我能想出什么 【参考方案1】:细节上相当稀疏,但这样的事情应该会让你接近。
Update A
set IsDeleted = 1
from TableA A
join TableB B on b.ItemNumber = A.ItemNumber
where b.OrderNumber > 'XY004005'
and b.OrderNumber < 'XY500000'
【讨论】:
好的,所以我可以做一个 > 即使它是一个字符串?我想我需要在某个地方获取一个子字符串,并且可能将字符串转换为 int。但是 XY 确实在每个 OrderNumber 之前,所以也许这会起作用 当然。它只是将值排序为 varchar 而不是 ints。这带来了它自己的挑战,但对于您的情况,它应该可以正常工作。这与按姓氏排序人员的概念相同。我不得不问...如果每个订单都以“XY”开头,那有什么意义?为什么不删除它并将数据类型更改为 int。以上是关于如何使用表 B 中的信息更新表 A 中的列 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
SQL UPDATE - 如何使用另一个表更新一个表中的列?
用数据更新了表“c”,此更新应再次更新表“a”和表“b”中的列