0

この Postgres ステートメントを Oracle 11g に解析するにはどうすればよいですか?

UPDATE teams as new 
  SET counter=old.counter, 
      task_counter=old.task_counter 
FROM teams as old
WHERE new.is_old=0 
  AND old.is_old=1 
  AND new.name=old.name 
  AND new.county=old.county;

前もって感謝します。

4

3 に答える 3

1

結合を使用して更新を実行したいようですUPDATE ... FROM。これは直接サポートされていないようですがUPDATE、サブクエリを使用して実行できます。

見る:

于 2013-01-25T03:24:26.553 に答える
0
UPDATE teams
  SET (counter, task_counter) = (select counter, task_counter 
                                 FROM teams old
                                 WHERE old.is_old = 1 
                                   AND teams.name = old.name   
                                   AND teams.county = old.county)
where is_old = 0

これは、副選択が名前/郡/is_old の組み合わせごとに 1 つの行のみを返すことを前提としています。

于 2013-01-25T08:34:47.530 に答える
0

Oracle の便利なテクニックの 1 つは、これらのトリッキーな更新に MERGE を使用することです。

Merge into teams new 
From (
  Select counter,
         task_counter
  From   teams 
  Where  is_old = 1) old
On (new.is_old = 0          and
    new.name   = old.name   and
    new.county = old.county   )
when matched then update
set counter      = old.counter and
    task_counter = old.task_counter
于 2013-01-25T09:04:39.490 に答える