sql-server - 基于选择到同一个表的更新 - AGAIN 和 AGAIN

标签 sql-server tsql

在 Microsoft SQL Server 中:

这个问题我已经看过好几次了,但是看不到有人解决这个问题:

UPDATE theTable t1
SET t1.col2 =
    (SELECT (10 * (col1 + col2))
     FROM theTable t2
     WHERE t1.busRelAccount = t2.busRelAccount
     AND t2.rowName = 'POS'
    )
WHERE t1.busRelAccount = t2.busRelAccount
AND t1.rowName = 'INVENTORY'
;

有人在不使用 CURSOR 和循环表格的情况下解决了这个问题吗?

最佳答案

不能 100% 确定您要做什么 - 但最有可能的是,您可以编写更简单的 UPDATE 语句 - 像这样:

UPDATE t1
SET t1.col2 = 10 * (t2.col1 + t2.col2)
FROM theTable t1
INNER JOIN theTable t2 ON t1.busRelAccount = t2.busRelAccount
WHERE 
    t1.rowName = 'INVENTORY'
    AND t2.rowName = 'POS'
;

基本上,您在两个表(实际上是同一个表)之间定义一个 JOIN,然后定义如何根据 t2t1 的列

关于sql-server - 基于选择到同一个表的更新 - AGAIN 和 AGAIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11009563/

相关文章:

sql-server - SQL Server的远程登录超时设置是否等同于在连接字符串中设置连接超时值?

c# - 为什么要设置命令对象参数的大小参数呢?

sql - 将具有相同 ID 的多行合并为一行

LIKE 之间的 SQL Server 日期

TSQL 更改表为删除和更新的级联添加约束

c# - C# 中的 Azure SQL DB 连接问题

javascript - 处理从 javascript 到 MySQL 到 javascript 到 MS SQL 到 javascript 的时区

sql - 在 SQL Server 2008 中使用 FOR XML PATH 提高 SQL 查询的性能

sql-server - 删除其他表未引用的行的优雅方法

sql - 如何对sql server中非常大的表的非索引字段进行高效搜索