【发布时间】:2021-10-31 18:33:44
【问题描述】:
我可以使用相同的子查询而不是调用两次来更新一对列吗?
-- Table D contains a Date and a ProcessId
UPDATE T1
SET (Val1, Val2) = (
SELECT SUM(Val1A), SUM(Val2A)
--Val1A and Val2A are equations and are not taken from just one table but multiple
FROM D
INNER JOIN T8 ON T8.ProcessId = D.ProcessId
INNER JOIN T4 ON T4.Id = T8.T4Id
INNER JOIN T6 ON T4.Id = T6.T4Id
WHERE D.Date <= @ProcessDate AND T6.T4Id = T1.T4Id)
FROM T1
INNER JOIN T4 ON T4.Id = T1.T4Id
INNER JOIN T5 ON T5.Id = T1.T5Id
INNER JOIN T6 ON T4.Id = T6.T4Id
INNER JOIN T7 ON T7.Id = T4.T7Id
而不是做
UPDATE T1
SET Val1 = (SELECT Val1A
FROM T2
INNER JOIN T8 ON T8.T2Id = T2.Id
INNER JOIN T4 ON T4.Id = T8.T4Id
INNER JOIN T6 ON T4.Id = T6.T4Id
WHERE T4.T1Id = T1.Id)
Val2 = (SELECT Val2A
FROM T2
INNER JOIN T8 ON T8.T2Id = T2.Id
INNER JOIN T4 ON T4.Id = T8.T4Id
INNER JOIN T6 ON T4.Id = T6.T4Id
WHERE T4.T1Id = T1.Id)
FROM T1
INNER JOIN T4 ON T4.Id = T1.T4Id
INNER JOIN T5 ON T5.Id = T1.T5Id
INNER JOIN T6 ON T4.Id = T6.T4Id
INNER JOIN T7 ON T7.Id = T4.T7Id
注意:FROM 和 WHERE 子句显然比这更复杂
【问题讨论】:
-
为什么不把
JOIN放在FROM中? -
内部查询用于根据从外部查询传递的日期和 Id 计算新值,因此简单的连接不起作用
-
什么日期?所有的连接都在
IDs。 -
我觉得你试图“简化”这个问题正在混淆它。如果您发布更具代表性的示例,那将有助于我们为您提供帮助。例如,当您的 SQL 中没有日期列时,谈论日期是没有意义的。
标签: sql sql-server tsql sql-update