我需要编写一个多次调用递归查询的查询。
我无法弄清楚该怎么做。我想我可以通过使用游标来做到这一点,在运行时准备 sql 语句,然后使用 EXEC(mySQLstatement) 在每个游标 FETCH NEXT 处运行它。
无论如何,这不是一个好方法。
这就是问题所在(当然这里是简化的,我只留下必要的列来表达自己):我有一个客户树(一个层次结构),并且为每个客户定义了一些联系人。
CUSTOMERS 表包含一个 ID_CUSTOMER 字段和一个 ID_PARENT_CUSTOMER 字段,CUSTOMER_CONTACTS 表包含一个 ID_CUSTOMER 字段和一个 ID_CONTACT 字段。
通过这个查询(它有效),我可以获得客户 308 的所有联系人及其子客户的所有联系人:
with [CTE] as (
select ID_CUSTOMER from CUSTOMERS c where c.ID_CUSTOMER = 308
union all
select c.ID_CUSTOMER from [CTE] p, CUSTOMERS c
where c.ID_PARENT_CUSTOMER = p.ID_CUSTOMER
)
select ID_CUSTOMER into #Customer308AndSubCustomers from [CTE]
select 308 as ParentCustomer, ID_CUSTOMER, ID_CONTACT, from CUSTOMER_CONTACTS
WHERE ID_CUSTOMER IN (select * from #Customer308AndSubCustomers)
drop table #Customer308AndSubCustomers
但我想在一个查询中对所有客户都使用相同的查询,而不仅仅是 308。所以这就是为什么我建议使用游标,这样我就可以重用上述语句并只使用变量而不是 308。
但是你能提出一个更好的查询吗?