在SQL Server中按DateModified列查找更改的行
我有多个表,比如说表2、表3、表4,每个表都有一个DateModified列。更新表1以修改表2、表3、表4中与表1中修改的当前日期不同的最新日期的最佳方法是什么 这是我当前的查询,它工作得很好,但在大型表(比如2.000.000行)上速度很慢在SQL Server中按DateModified列查找更改的行,sql,sql-server,Sql,Sql Server,我有多个表,比如说表2、表3、表4,每个表都有一个DateModified列。更新表1以修改表2、表3、表4中与表1中修改的当前日期不同的最新日期的最佳方法是什么 这是我当前的查询,它工作得很好,但在大型表(比如2.000.000行)上速度很慢 update t1 set IsChanged = 1, DateModified = isnull(( select max(v) from (va
update
t1
set
IsChanged = 1,
DateModified = isnull((
select
max(v)
from
(values (t2.DateModified), (t3.DateModified), (t4.DateModified)) as value (v)
), '1900-01-01')
from
Table1 t1
inner join Table2 t2 on t2.id_Table1 = t1.id_Table1
inner join Table3 t3 on t3.id_Table2 = t2.id_table2
inner join Table4 t4 on t4.id_Table3 = t2.id_table3
where
isnull(t1.DateModified, '1900-01-01') <> isnull((
select
max(v)
from
(values (t2.DateModified), (t3.DateModified), (t4.DateModified)) as value (v)
), '1900-01-01')
使用CASE WHEN来获得最高的DateModified可能比max快。创建一个触发器,在必要时更新Table1可能是有意义的,这样就完全不需要这个复杂的查询了。顺便问一下,这里的所有关系都是一对一的吗?否则我可以想象你会得到意想不到的结果。是的,最终它们是一对一的