Тема: Питання по "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, які вже в ній є
Заздалегідь спасибі за відповідь