указать ID договора, если по неключевым параметрам найден только один подходящий

Всем привет! Access VBA + SQL

Есть таблица t_Contract основных параметров (param1, param2....10) договоров + ID_contract договора.

Есть таблица t_ContractChanges дополнительных параметров (ch_1, ch_2...15) договора + Ch_Contract_ID - ID этого набора.

Связка строк с ID_contract+Ch_Contract_ID - это один конкретный договор.

Может быть связка: ID_contract / Ch_Contract_ID

1 / 5

2 / 6

2 / 8

т.е. одному ID_contract может принадлежать несколько Ch_Contract_ID. Ch_Contract_ID принадлежит только одному ID_contract.

Есть временная таблица t_Buffer со значениями нескольких параметров(buffer1, buffer2...15), соответствующих нескольким параметрам из t_Contract и нескольким из t_ContractChanges. В t_Buffer нет ключей ID из t_Contract и t_ContractChanges. Набор параметров buffer1+...+buffer15 может позволить найти одну или несколько строк с ID_contract+Ch_Contract_ID.

ЗАДАЧА: в поле t_Buffer.buffer_ID всем строкам надо указать один Ch_Contract_ID, если на основе параметров buffer1+...+buffer15 удалось найти только ОДНУ строку с ID_contract+Ch_Contract_ID. Если больше строк нашлось или не нашлось, то ничего не делать

по моей логике это что-то типа

UPDATE t_Buffer
SET buffer_ID= SELECT T.Ch_Contract_ID FROM 
   (SELECT Ch_Contract_ID, ID_contract, count (*)
   FROM t_Buffer
   LEFT join t_ContractChanges on ...
   LEFT join t_Contract on ...
   WHERE buffer1=param1 and buffer2=ch1 and другие параметры 
   GROUP by Ch_Contract_ID, ID_contract
   HAVING COUNT(*) =1) as T
   )

в правильном направлении двигаюсь?


Ответы (0 шт):