Найдите 1-го подходящего родителя и обновите его с помощью parent_id в таблице business_table в SQL Server. - PullRequest
0 голосов
/ 09 мая 2018

У меня есть этот бизнес стол

ref_ID      name    parent_id 
-----------------------------
ABC-0001    Amb     NULL 
PQR-899     boss    NULL
tgv-632     pick    NULL

Я хочу обновить parent_id, который хранится в другой таблице parent_customer.

Таблица

parent_customer содержит иерархию данных, в которой, когда оба значения ref_id и parent_id одинаковы, это означает, что он является родителем всей иерархии.

Например:

4   PQR-899    PQR-899  this is ultimate parent of hierarchy

parent_customer

ID  ref_id     parent_id  
---------------------------
1   ABC-0001   opr-656
2   opr-656    ttK-668
3   ttK-668    ttK-668
4   PQR-899    PQR-899
5   kkk-565    AJY-567  
6   AJY-567    UXO-989
7   UXO-989    tgv-632
8   tgv-632    mnb-784 
9   mnb-784    qwe-525 
10  qwe-525    qwe-525

match_table_CM:

id    main_id
--------------
1     opr-656
2     PQR-899
3     tgv-632
4     mnb-784

Сначала необходимо сопоставить бизнес-таблицу ref_id с parent_customer ref_id, получить parent_id и проверить, находится ли этот родительский идентификатор в match_table_CM (main_id), а затем обновить его с помощью бизнес стол parent_id. В противном случае найдите следующую родительскую проверку с основной таблицей. Если все не найдено, обновите его, указав последний родительский идентификатор.

Например: давайте возьмем ABC-0001 из бизнес-таблицы, его parent_id равно NULL; проверьте с помощью parent_customer столбца таблицы ref_id, найдите первую запись с помощью parent_id = opr-656, затем проверьте, существует ли этот идентификатор в таблице match_table_CM (1 opr-656) - да - затем обновите бизнес-таблицу (parent_id) в противном случае проверьте соответствие следующей иерархии parent_customer parent_id ttK-668 проверяйте с помощью match_table ... пока не достигнете вершины (выйдите, когда будет найдено 1-е совпадение, и перейдите к следующему идентификатору из бизнес-таблицы)

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Пожалуйста, попробуйте ниже единицы. Это будет полезно для вас.

UPDATE bus
SET bus.parent_id = pc.ID
FROM tbl_buss bus
inner join parent_customer pc on pc.ref_id = bus.ref_id
inner join match_table_CM mt on mt.main_id = pc.parent_id

Спасибо, Амит Праджапати

0 голосов
/ 09 мая 2018

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

UPDATE bt 
SET    bt.parent_id = pc.parent_id 
FROM   businesstable bt 
       INNER JOIN parent_customer pc ON pc.ref_id = bt.ref_id 
       INNER JOIN match_table_cm mt  ON mt.main_id = pc.parent_id 

выход

+------------+------+------------+
|   ref_ID   | name | parent_id  |
+------------+------+------------+
| ABC-0001   | Amb  | opr-656    |
| PQR-899    | boss | PQR-899    |
| tgv-632    | pick | mnb-784    |
+------------+------+------------+

Онлайн демо: http://rextester.com/FAENX59383

0 голосов
/ 09 мая 2018

Вы можете написать свое обновление следующим образом.

update t 
set        t.parent_id = pc.parent_id 
from       [yourtble] t 
inner join parent_customer pc  on pc.ref_id = t.ref_id
where      exists 
           ( 
                  select 1 
                  from   match_table_cm 
                  where  main_id= pc.parent_id )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...