Может ли кто-нибудь порекомендовать (SQL? ) Алгоритм разрешения множественных много-много исключений
Во - первых, я здесь новичок-так что я рад быть шлепнутым, если это тривиальный вопрос, на который уже был дан ответ, или я разместил его совершенно не в том месте.
Я бывший разработчик, который серьезно заржавел, и я столкнулся с проблемой, которая меня заблокировала. Это может быть очевидно для кого-то более опытного, но после мозгового штурма, обсуждения и поиска этого я в настоящее время ничего не знаю.
Я работаю над устаревшей системой с довольно ужасной структурой данных, с которой у меня нет вариантов что-либо сделать. Ниже приведено упрощение проблемы, но я думаю, что это лучший способ объяснить ее.
Что касается того, что я пытаюсь сделать :
В базе данных у меня есть записи отгрузки A-G
Я хочу удалить все завершенные поставки. Отгрузки A-E завершены, но не F или G.
В системе также есть несколько счетов-фактур.
Правила :
1. Если завершенная отгрузка является частью счета-фактуры, содержащей другие незавершенные отгрузки, она не может быть удалена
2. Если завершенная отгрузка является частью счета-фактуры, содержащей другие отгрузки, которые не могут быть удалены, она не может быть удалена
Проблема :
- Счет I1 содержит отгрузки A, B и C. Поскольку все они завершены, я мог бы удалить их все
- Счет I2 содержит отгрузки A, F и G. поскольку F & G не заполнены, я не могу удалить ни одну из них
- Но поскольку а не может быть удалено по правилу 1, поскольку оно является частью счета I1, то и в или С не могут быть удалены
..затем нам нужно будет проверить все другие счета-фактуры, частью которых являются B & C...
..и так до бесконечности...
..и ни за что на свете я не могу придумать простого, быстрого SQL-оператора или алгоритма, чтобы сделать это иначе, чем с помощью грубой силы или рекурсии-до-конца
Любые альтернативные предложения с благодарностью принимаются!
Извиняюсь также, если это очевидно, но я просто переоцениваю это / не вижу очевидного сам..
Что я уже пробовал:
Я пробовал загружать все завершенные отгрузки во временную таблицу и неоднократно запускал "является членом счета-фактуры, содержащей незавершенные отгрузки" и "является членом счета-фактуры, содержащей не удаляемые отгрузки", пока не получу ложный результат..
.но это не кажется очень эффективным...