如何评估此查询(嵌套)

时间:2014-05-29 18:26:38

标签: sql sql-server

UPDATE edw.dbo.load_control 
SET ROW_COUNT=?, end_time=getdate() 
WHERE package_name=? 
 AND load_control_id=(
    SELECT MAX(load_control_id) 
    FROM edw.dbo.load_control
 )

我更关心WHERE子句。它只是选择最大ID并返回它或者它将使用和package_name评估最大ID。

例如,如果max(id)为6但package_names不同而下一个max(id)为5且包名称相同则会更新id 5吗?

3 个答案:

答案 0 :(得分:1)

UPDATE语句将更新

  • package_name
  • 中传递的参数相匹配
  • load_control_id等于max(id) 而不是考虑到package_name(毕竟,没有条件 for package_name在该子查询中!)

因为在你的情况下,没有给定package_name的行和6的值 - 不会更新任何行。

答案 1 :(得分:0)

在你的例子中,你说

select max(load_control_id) from edw.dbo.load_control

将返回6.

然后更新将被视为

update edw.dbo.load_control 
set ROW_COUNT=?, end_time=getdate() 
where package_name=? and load_control_id=6

答案 2 :(得分:0)

where子句中的规范不是有条件的,sql server会准确解释你告诉它的内容。将过滤掉与package_name不相等的所有内容。然后,也会过滤掉load_control_id不等于max的所有内容。返回空集时,Sql server没有问题。

如果您想要指定package_name的max load_control_id,那么您可以在子选择中添加该条件。

(select max(load_control_id)
from edw.dbo.load_control
Where package_name = ?)