【问题标题】:How do I update a col in table A, using info From table B [duplicate]如何使用表 B 中的信息更新表 A 中的列 [重复]
【发布时间】:2014-07-17 17:57:07
【问题描述】:

我使用的是 Microsoft SQL Server 2005

我有两张桌子,比如说TableATableB

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')

我需要编写一个执行以下操作的更新查询:

  1. 获取所有 B_OrderNumbersB_ItemNumber,其中字符串的 int 部分 XY004005 将包含在 004005 < 500000 之后,但 XY511340 不会)

  2. 将此商品编号用于UPDATE A_IsDeleted WHERE A_ItemNumber = B_ItemNumber

我基本上想将所有A_ItemNumber = B_ItemNumber where B_OrderNumber < XY500000A_IsDeleted 更改为TRUE

我认为这可能是一个简单的加入/更新,但看起来不允许这样做。

【问题讨论】:

  • 我确实看到了那个答案。我会再读一遍。感谢设计这个数据库的人,我也有字符串应该有整数,所以我会挖掘更多,看看我能想出什么

标签: sql sql-server join sql-update


【解决方案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。
猜你喜欢
  • 2014-06-27
  • 1970-01-01
  • 2022-06-15
  • 2014-05-10
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 2020-02-19
相关资源
最近更新 更多