|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Вопрос по «merge», языка sql
Доброе время суток, форумчане.
Есть таблица устройств (DEVICE) в БД на FireBird (с полями «Наименование», «Тип», «Зав.номер» и т.д.) в которую из Excel экспортируются данные (устройства). В БД добавилась вторая таблица «Человеко/часы» (NORM_HOURS), в которой нужно содержать только поля «Наименование» и «Тип» этих устройств ну и еще некоторые поля отличные от полей в DEVICE. Т.е. в NORM_HOURS должны содержаться только уникальные устройства по оговоренным двум полям. После экспорта устройств из файла в DEVICE, я делаю операцию «MERGE», для таблицы NORM_HOURS, чтоб эти устройства появились в NORM_HOURS. Код:
merge into NORM_HOURS nh using DEVICES d on ((nh.NAME_DEVICE=d.NAME_DEVICE and nh.TYPE_DEVICE=d.TYPE_DEVICE)) when matched then update set nh.NAME_DEVICE=d.NAME_DEVICE, nh.TYPE_DEVICE=d.TYPE_DEVICE when not matched then insert (nh.ID, nh.NAME_DEVICE, nh.TYPE_DEVICE, nh.USER_ID, nh.DEPARTMENT_ID, nh.TYPE_INPUT) values (GEN_ID(GEN_ID_NORM_HOURS, 1), d.NAME_DEVICE, d.TYPE_DEVICE, 1, 2, 3) Вопросы по данной теме: 1. можно ли провести операцию «MERGE» делать не для всей таблицы DEVICE, а только для некоторых ее строк, скажем в которых d.PROPOSAL_ID=7 например? 2. если вдруг у меня d.TYPE_DEVICE пусто, а d.NAME_DEVICE заполнено, то такие строки продолжают вставляться, при повторном проведении скрипта (не смотря на то, что они в NORM_HOURS уже есть), можно ли как-нибудь избавиться от повторной вставки? 3. и правильно ли будет если я из скрипта уберу строки: Код:
...when matched then update set nh.NAME_DEVICE=d.NAME_DEVICE, nh.TYPE_DEVICE=d.TYPE_DEVICE ? Просто я НЕ хочу обновлять те строки в NORM_HOURS, которые уже в ней есть |