我正在尝试更新连接到另一个表的表中的某些行。左表由ID索引;右表连接在同一个ID上,但每个ID有多行。我的查询如下:
UPDATE t1
SET t1.modified = t2.created
FROM table1 t1
INNER JOIN table2 t2
ON t1.ID = t2.ID
请注意,t1.modified和t2.created都是datetime。 如上所述,t2每个ID有几行,每个行具有不同的创建值(因此主键是t2,创建)。我想要做的是设置t2.created = t1.modified的最大值。但是,在加入时,t1.modified值不会按特定顺序更新,因此无论最后一行更新哪一行,都是t1.modified获取的值。我尝试使用t1.modified = max(t2.created),但显然我不能在更新查询中使用聚合函数,也不能使用order子句(即对行进行排序,以便更新的最后一行实际上是更新查询中的最新t2.created值。
非常感谢您提供给我的任何帮助!谢谢!
答案 0 :(得分:1)
UPDATE t1
SET modified = isnull((SELECT max(t2.created)
FROM table2 t2
WHERE t2.ID = t1.ID), modified)
FROM table1 t1;
如果返回的值为null,则使用isnull函数将modified设置为self。应该处理空问题。
答案 1 :(得分:-1)
你可以这样做,虽然它可能不是标准的SQL。但它应该适用于SQL Server。
update t1
set t1.modified = (select max([created]) from t2 where t1.ID = t2.id)