Есть ли способ реализовать отношение «многие к одному» в DB2? - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно создать структуру данных, подобную этой:

Table 1
Code, Value, Offer_ID

Я создаю сервис, который для заданной комбинации «Код» и «Значение» должен вернуть идентификатор Offer_ID, который я предварительно настроил.

Например:

Code    Value  Offer_ID
------ ------- ----------
Age       30     OFF1
Age       30     OFF2
Province  RM     OFF2
Age       40     OFF3
Province  TO     OFF3
Age       40     OFF4
Province  TO     OFF4
Operator  TIM    OFF4 

Служба вызова всегда вызывает меня, передавая значения Age, Province и operator.Я должен посмотреть в этой таблице, если я найду конкретный Offer_ID для трех значений вместе (как OFF4), или для 2 (как OFF3), или для Age, который является единственным обязательным (OFF1).

Поэтому, если клиент передает мне провинцию BO и оператора WIND, я должен вернуть OFF1

Как я могу это сделать?Как я могу структурировать таблицы и запрос?

Я надеюсь, что смог выявить проблему ...

Спасибо 1000 тем, кто мне помогает ... мы сходим с ума ... !!!

1 Ответ

0 голосов
/ 24 мая 2019

Попробуйте это:

with tab (age, province, operator, offer_id) as (values
  (30, null,  null, 'OFF1')
, (30, 'RM',  null, 'OFF2')
, (40, 'TO',  null, 'OFF3')
, (40, 'TO', 'TIM', 'OFF4')
)
, op_inp (age, province, operator) as (values
--(40, 'TO', 'TIM') --'OFF4'
(40, 'TO', 'VODAFONE') --'OFF3'
--(30, 'RM', 'VODAFONE') --'OFF2'
--(30, 'TO', 'VODAFONE') --'OFF1'
)
select offer_id /*Just for info*/, order_flag
from 
(
select t.*, 3 as order_flag
from tab t
join op_inp o on o.age=t.age and o.province=t.province and o.operator=t.operator
  union all
select t.*, 2 as order_flag
from tab t
join op_inp o on o.age=t.age and o.province=t.province --and t.operator is null
  union all
select t.*, 1 as order_flag
from tab t
join op_inp o on o.age=t.age --and t.province is null and t.operator is null
)
order by order_flag desc
fetch first 1 row only
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...