2

我正在尝试更新连接到另一个表的表中的某些行。左表按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 都是日期时间。如前所述,t2 每个 ID 有几行,每行都有不同的 created 值(因此主键是 t2,created)。我想要做的是设置 t2.created=t1.modified 的最大值。但是,在加入时, t1.modified 值不会以特定顺序更新,因此无论哪一行最后更新,这就是 t1.modified 获得的值。我尝试使用 t1.modified=max(t2.created),但显然我不能在更新查询中使用聚合函数,也不能使用 order 子句(即对行进行排序,以便更新的最后一行有效地成为更新查询中的 t2.created 的最新值。

非常感谢您能为我提供的任何帮助!谢谢!!

4

2 回答 2

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 设置为自身。这应该解决空问题。

于 2013-01-21T03:53:21.803 回答
-1

您可以这样做,尽管它可能不是标准 SQL。但是它应该适用于 SQL Server。

update t1 
    set t1.modified = (select max([created]) from t2 where t1.ID = t2.id)
于 2013-01-21T03:51:51.790 回答