Стандартный синтаксис команды Update допускает следующие варианты:
Update TABLE1 set (COLUMN1, COLUMN2) = ( select max(a), min(b) from TABLE2 )
WHERE COLUMN3 = c
Update TABLE1 set COLUMN1 = a, COLUMN2 = b
WHERE COLUMN3 = c
Update TABLE1 set COLUMN1 = a, COLUMN2 = ( select max(b) from TABLE2 )
WHERE COLUMN3 = c
Update TABLE1 set COLUMN1 = ( select max(a) from TABLE2 ) ,
COLUMN2 = ( select max(b) from TABLE3 )
WHERE COLUMN3 = c
SELECT-ы должны возвращать гарантированно только одну строку !.
Интересная задачка. В таблице есть поле id_level , которое
заполнено числами с пробелами, т.е. 1,2,3,5,9.
Требуется удалить пробелы, то есть получить значения 1,2,3,4,5, при этом обеспечить
тот же порядок строк.
Вот 2 варианта решения этой задачи. Первый годится, если имеется подходящий индекс. Второй абсолютно универсальный.
UPDATE table_A SET id_level = ROWNUM WHERE ROWID IN (SELECT /*+ INDEX (table_A table_A#id_level )*/ ROWID FROM table_A ) UPDATE table_A SET id_level = ROWNUM WHERE id_level IN (SELECT id_level FROM table_A GROUP BY id_level)Подзапрос должен выдать нужный нам порядок перебора таблицы для обновления.