【发布时间】:2023-01-18 23:03:19
【问题描述】:
我有以下查询并且无法将它们放在一起:
DECLARE @Value1 INT = 3
DECLARE @Value2 INT = 6
UPDATE TableA SET
Column1 = B.NewValue,
FROM TableA A INNER JOIN TableB B ON A.NumberId = B.NumberId AND
AND A.Type = @Value1
UPDATE TableA SET
Column2 = B.NewValue,
FROM TableA A INNER JOIN TableB B ON A.NumberId = B.NumberId AND
AND A.Type = @Value2
我的目标是让一个查询带有一个连接,该连接根据连接中的值更新列。 这只是一个例子(在我的例子中有更多的列,因此有更多的查询)但总的来说我希望尽可能少的查询(在这个例子中:一个查询而不是两个)
DECLARE @Value1 INT = 3
DECLARE @Value2 INT = 6
UPDATE TableA SET
Column1 = B.NewValue, --if the join joins on @Value1
Column2 = B.NewValue, --if the join joins on @Value2
FROM TableA A INNER JOIN TableB B ON A.NumberId = B.NumberId AND
AND A.Type = B.@Value1/@Value2
这可能吗(例如使用子查询)?
【问题讨论】:
-
T-SQL 被多种产品使用,例如(但不限于)Sybase、SQL Server 和 Azure Synapse。您使用什么 (R)DBMS?
-
“如果连接在@Value1 上连接”作为用户
INNER JOINs 那么JOIN必须发生。因此,您实际上是在LEFT JOINs 之后吗?是这样,如果找不到另一个表中的值会怎样? -
我也觉得你的简化可能会隐藏一些实际问题。如果您可以提供实际逻辑和目标的详细信息,以及可能更好地解释问题的有意义的示例数据(和预期结果)。
标签: performance tsql