with RECURSIVE temp as (
# 1、Payment_Gateway作为被调用,找到主调服务
select
s2.service_id,
s2.service_name,
1 as dependency_depth,
concat('Payment_Gateway->', s2.service_name) as dependency_path
from service_dependencies sp
join services s on sp.callee_service_id = s.service_id # 关联被调用方(Payment_Gateway
join services s2 on sp.caller_service_id = s2.service_id # 关联主调用方(直接依赖)
where year(first_call_date) = 2025
and s.service_name = 'Payment_Gateway' # 被调用方是 Payment_Gateway
union all
# 上层作为被调服务,找到本层的主调服务
select
s2.service_id as service_id,
s2.service_name,
t.dependency_depth + 1,
concat(t.dependency_path, '->', s2.service_name)
from temp t
join service_dependencies sp on sp.callee_service_id = t.service_id # 上一层的主调用服务 → 本层的被调用服务
join services s2 on sp.caller_service_id = s2.service_id # 关联本层的主调用服务
where year(first_call_date) = 2025
)
select * from temp
order by dependency_depth,service_id,dependency_path
;