#sql #oracle #sql-update
Вопрос:
Предположим, у меня есть таблица t1 со следующими данными, в которой значение идентификатора не меняется
ID | Имя | Идентификатор приложения | Расположение |
---|---|---|---|
1 | UAT | 123 | США |
1 | тест | 222 | Великобритания |
Теперь я хочу обновить только столбец » имя » только в 1-й строке(ниже указан желаемый o/p).
ID | Имя | Идентификатор приложения | Расположение |
---|---|---|---|
1 | разработка | 123 | США |
1 | тест | 222 | Великобритания |
Комментарии:
1.
update your_table set name = 'DEV' where ID = 1 and Applciation_id = 123
???2. Таблица SQL-это набор, она не имеет внутреннего порядка. Так что «первого» ряда нет, и ваш вопрос неясен. Пожалуйста, определите, как определить «первую» строку в вашем случае.
3. community.oracle.com/tech/developers/discussion/4489966/…
Ответ №1:
Ничто не мешает вам использовать текущее значение столбца, который вы обновляете. Так
update <your_table>
set name = 'DEV'
where id = 1
and name = 'UAT';
Ответ №2:
первая строка зависит от того, как вы сортируете данные, поскольку таблицы представляют собой неупорядоченные наборы. Предположительно, обновите таблицу в зависимости от сортировки application_id
столбца по возрастанию, например
MERGE INTO t USING
(SELECT t.*, 'DEV' AS name_new
FROM t
ORDER BY t.application_id
FETCH FIRST ROW ONLY) t1
ON ( t1.id = t.id AND t1.application_id = t.application_id )
WHEN MATCHED THEN UPDATE SET t.name = name_new