Исходные данные задачи:
1. Есть Table1 c полями:
a. Id – код
b. Amount – сумма
2. Есть периодическая операция, которая должна выбрать записи из table1 и увеличить значение поля Amount на заданную величину. При запуске операции открывается временная таблица tmpTable1, с полями:
a. Mask – маска для поля id в Table1
b. addAmount – величина , на которую необходимо увеличить значение в поле Amount в Table1
Т.е. примерно такой код:
X++:
While select from tmpTable1
Join forUpdate Table1 where Table1.Id like tmpTable1.Mask
{
Table1.Amount += tmpTable1.addAmount;
Table1.update();
}
Вопрос – как реализовать проверку, чтобы значение в поле mask таблицы tmpTable1 были взаимоисключающими, т.е. чтобы одно значение Id в Table1 удовлетворяло только одной (или ни одной) записи в tmpTable1.
Пример:
Вариант 1 (корректный) - когда одна запись из table1 может быть сджойнена только с одной записью tmpTable1
Mask1 = 6*
Mask2 = 7*
Вариант2 (некорректный) - когда одна запись из table1 может быть с джойнена c несколькими записями tmpTable1
Mask1 = 6*
Mask2 = *7