|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Возник типовой вопрос — как удалить данные из запроса с join? Я погуглил как в интернете, так и по форуму . Рабочий пример у меня есть: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Но у меня сложилось впечатление, что IN лучше бы избегать, везде стараются переписать запрос, чтобы использовать EXISTS. Но не могу сообразить, как написать такой запрос. Запрос в формате DELETE (subquery) может и был бы эффективнее, но тут какая-то непонятная мне магия действует. Я не могу понять, какая таблица считается key preserved. В TRANS_LINK есть PK и вроде бы это должна быть она. Но когда я пытаюсь выполнить DELETE, то получаю ошибку ORA-01752. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 22:47 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Alibek B.Но не могу сообразить, как написать такой запрос. Просто убери TRANS_LINK из подзапроса. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 23:08 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Так? Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Синтаксис вроде бы принимается. А если мне нужен left join? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 23:22 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Alibek B.А если мне нужен left join?truncate ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2019, 23:30 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Просто убери TRANS_LINK из подзапроса. И получишь совершенно другой DELETE: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
Посему вначале Алибек должен озвучить логику удаления. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 00:54 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Словами логика следующая. В TRANS_LINK находятся данные с историей изменений (SCD2). В TRANS_BATCH_LINK структура идентичная, там находятся добавляемые данные. Мне нужно удалить из TRANS_LINK все записи, которые действуют после даты действия соответствующих записей в TRANS_BATCH_LINK (то есть у которых TRANS_LINK.DATE_BEG > TRANS_BATCH_LINK.DATE_BEG). Соответствие записей однозначно определяется комбинацией полей TRANS_PROVIDER_ID и LOCAL_CLIENT_ID. Потом я в TRANS_LINK обновляю период окончания действия у текущих (действующих) записей и добавляю новые записи. То есть последовательно выполняю два запроса: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
Вот первый запрос мне бы хотелось оптимизировать. Как мне кажется, использование EXISTS предпочтительнее IN. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 12:44 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Ты бы помедитировал над что такое SCD2 прежде чeм удалять. Сам-же пишешь: В TRANS_LINK находятся данные с историей изменений (SCD2). Ну и какая история изменений после удаления? SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 15:16 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Похоже у тебя by-temporal validity, т.е. у тебя effective dates и valid dates. Например: оптовая база. 15 Января пришло ц.у. с 1 Февраля девяток яиц стоит 65 рублей. Имеем: Код: plsql 1. 2. 3.
A сегoдня пришло ц.у. с 25 Января девяток яиц стоит 66 рублей. Имеем: Код: plsql 1. 2. 3. 4.
Т.e. начиная с 15 Января 2019 при составлении контракта на поставку скажем 1 Марта 2019 яйца продаем по 65. A начиная с 19 Января 2019 при составлении контракта на поставку того же 1 Марта 2019 яйца продаем по 66. Если 19 Января удалить первую запись то первый же аудит надает CFO по голове ибо как ты обьяснишь 65р в первом контракте. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 15:46 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
SYНу и какая история изменений после удаления? История (прошлая) сохраняется. Удаляются запланированные ранее изменения. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.01.2019, 19:07 |
|
Про удаление по результатам соединения
|
|||
---|---|---|---|
#18+
Alibek B.Удаляются запланированные ранее изменения. В SCD2 ничeго не удаляется. В SCD2 что написано перoм то не вырубишь топором . Xранятся ВСЕ записи и даты их действия для того чтобы можно было бы возпроизвести систeму как она была на любой момент времени. То что ты пытаешься сделать может тебе и подходит но это не SCD2. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.01.2019, 01:50 |
|
|
start [/forum/topic.php?fid=52&fpage=87&tid=1882912]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 334ms |
total: | 478ms |
0 / 0 |