Каким образом можно скопировать все записи внутри таблицы с одним id на другой id учитывая все даты на sql
В общем есть два расписания, они хранятся в одной таблице, у одного time_table_name_id равное 1 у другого 2, грубо говоря нужно сделать копию первого расписания, скопировав time и actionn во второе учитывая дату чтобы она совпадала в обоих расписаниях и так же чтобы совпадал параметр num_in_day. Пока пришел только к этому запросу, но тут я изменяют только один день.
update file1
set time = (select time from file1
where time_table_name_id=1 and day ='2023-01-01' and num_in_day = 0),
actionn = (select actionn from file1
where time_table_name_id=1 and day = '2023-01-01' and num_in_day = 0)
where time_table_name_id=2 and day = '2023-01-01' and num_in_day = 0;
Подскажите пожалуйста как можно сделать так, чтобы это срабатывало для всех дат.
Ответы (1 шт):
Рассмотрите пример с MERGE. В вопросе нет необходимости добавления записей в расписание2, если они присутствуют в расписание1. Если необходимо, можно изменить секцию WHEN NOT MATCHED
merge into file1 a
using file1 b
on a.time_table_name_id=2
and b.day=a.day and b.num_in_day=a.num_in_day
and b.time_table_name_id=1
when matched then
update
set action=b.action,time=b.time
when not matched and time_table_name_id=1 then
insert (num_in_day ,day ,time ,action,time_table_name_id)
values(b.num_in_day,b.day,b.time,b.action,2) -- 2 - time_table_name_id
;
Предполагается, что поле Id описано как Identity (типа id int generated by default as identity), или что-то другое автоматически назначаемое.
