問題描述
我有這個(gè) business_table
I have this business_table
我想更新 business_table 的 parent_id
I want to update parent_id of business_table
parent_customer 是另一個(gè)表,列出了下面給出的 ref_ID 和 parent_id 的層次結(jié)構(gòu).
parent_customer is another table which list the hierarchy of ref_ID and parent_id given below.
更新business_table staps 的parent_id 是
To update the parent_id of business_table staps are
1) 檢查 business_table 的 ref_id 和 parent_customer 的 ref_id.例如.business_table 的 ref_ID ABC-0001 與 parent_customer ref_id 第一行 1 ref_id-ABC-0001 opr-656 匹配找到匹配
1) check ref_id of business_table with ref_id of parent_customer . eg. ref_ID ABC-0001 of business_table match with parent_customer ref_id 1st row 1 ref_id-ABC-0001 opr-656 match found
2) 然后檢查該匹配記錄的 parent_customer 的 parent_id,在這種情況下是 parent_id opr-656 檢查 match_table_CM 表
2) then check parent_id of parent_customer of that matched record which is in this case parent_id opr-656 check with match_table_CM table
match_table_CM 表在更新記錄之前列出了我們想要匹配的 id(我們正在檢查這個(gè),因?yàn)檫@是 CRM id 需要檢查 emplpoyee 是否存在)
match_table_CM table list the ids which we want to match before updating record (we are checking this because of this is CRM id need to check emplpoyee exist of not)
3) 未找到匹配項(xiàng),然后檢查 parent_customer 的 parent_id opr-656 與同一個(gè)表 parent_customer ref_id ,找到 ref_id opr-656 的第二條記錄然后選擇它的 parent_id ttK-668 檢查與 match_table_CM 匹配找到 1 ttK-668 然后用 business_table parent_id 更新其他明智的檢查,直到parent_customer ref_ID = parent_id (parent of all) 并更新該 id 即使沒有找到匹配所以在這種情況下如果沒有找到匹配那么 ttK-668 應(yīng)該是終于更新了
3)match not found then check with parent_id opr-656 of parent_customer with same table parent_customer ref_id , 2nd record found with ref_id opr-656 then pick its parent_id ttK-668 check with match_table_CM match found 1 ttK-668 then update with business_table parent_id other wise check till the parent_customer ref_ID = parent_id (parent of all) and update that id even if match not found so in this case if match not found then ttK-668 is should be updated at last
注意:- parent_customer 表列出了一個(gè)數(shù)據(jù)層次結(jié)構(gòu),其中當(dāng) ref_id 和 parent_id 相同時(shí),表示它是整個(gè)層次結(jié)構(gòu)的父級(jí).
note : - parent_customer table lists a hierarchy of data in which when both ref_id and parent_id are the same means it's the parent of the entire hierarchy.
例如:
4 PQR-899 PQR-899 這是層次結(jié)構(gòu)的最終父級(jí)
4 PQR-899 PQR-899 this is ultimate parent of hierarchy
父客戶
match_table_CM:
match_table_CM:
預(yù)期輸出
推薦答案
這應(yīng)該返回預(yù)期的結(jié)果:
This should return the expected result:
使用 EXISTS 重寫,因?yàn)?SQL Server 在遞歸部分不支持外部聯(lián)接:
Rewrite using EXISTS because SQL Server doesn't support Outer Joins in the recursive part:
優(yōu)化器的計(jì)劃看起來很糟糕,因此再次重寫以使用窗口聚合而不是相關(guān)子查詢:
The optimizer's plan looked bad, so another rewrite to use a Windowed Aggregate instead of a Correlated Subquery:
這篇關(guān)于與多個(gè)表的分層查詢匹配具有挑戰(zhàn)性的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!