Показать сообщение отдельно
Старый 15.01.2008, 15:23   #1  
Starling is offline
Starling
Участник
Дети Юза
 
530 / 76 (4) ++++
Регистрация: 20.10.2005
Адрес: Kiev
Взаимоисключающие условия для like
Исходные данные задачи:
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