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 ごとに複数の行があり、それぞれに作成された値が異なります (つまり、主キーは t2, created です)。私がしたいのは、t2.created=t1.modified の最大値を設定することです。ただし、結合すると、t1.modified 値は特定の順序で更新されないため、最後に更新された行が t1.modified が取得する値になります。t1.modified=max(t2.created) を使用してみましたが、明らかに、更新クエリで集計関数を使用することも、順序句を使用することもできません (つまり、最後に更新された行が効果的になるように行を並べ替えます)。更新クエリの 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;

isnull 関数を使用して、返された値が null の場合に modified をそれ自体に設定します。nullの問題を処理する必要があります。

于 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 に答える