【发布时间】:2018-05-13 20:43:04
【问题描述】:
我有这个业务表
ref_ID name parent_id
-----------------------------
ABC-0001 Amb NULL
PQR-899 boss NULL
tgv-632 pick NULL
yyy-888 xyz NULL
kkk-456 ued NULL
我想更新 business_table 的 parent_id
parent_customer 是另一个表,它列出了下面给出的 ref_ID 和 parent_id 的层次结构。
要更新 business_table stap 的 parent_id 是
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 找到匹配项
2) 然后检查匹配记录的 parent_customer 的 parent_id,在本例中为 parent_id opr-656 检查 match_table_CM 表
match_table_CM 表列出了我们要在更新记录之前匹配的 id(我们正在检查这个,因为这是 CRM id 需要检查雇员是否存在)
3) 未找到匹配然后检查 parent_customer 的 parent_id opr-656 与同一张表 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 应该是 终于更新了
注意:- parent_customer 表列出了数据的层次结构,其中当 ref_id 和 parent_id 相同时,表示它是整个层次结构的父级。
例如:
4 PQR-899 PQR-899 这是层次结构的最终父级
父客户
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
11 kkk-456 jjj-888
match_table_CM:
id main_id
--------------
1 ttK-668
2 PQR-899
3 tgv-632
4 mnb-784
预期输出
ref_ID name parent_id
-----------------------------
ABC-0001 Amb ttK-668
PQR-899 boss PQR-899
tgv-632 pick qwe-525
yyy-888 xyz NULL
kkk-456 ued jjj-888
【问题讨论】:
-
为什么
4 PQR-899 PQR-899是root,他不是nobody的父母? -
好的。你是对的。您已经预先知道了一组固定的表格。您可以在问题开始时发布图表或仅描述您的表格吗?到目前为止,我看到:
business_table、parent_customer、match_table_CM但很难从您的问题中了解它们的关系。请使用格式。 -
4 PQR-899 PQR-899 它的调用最终父级
-
例如。巴克莱公司是最终母公司,其子公司是巴克莱美国、巴克莱英国等
-
表之间没有直接关系,你必须根据数据编写SQL。我知道有点连线。
标签: sql sql-server tsql