我需要編寫一個多次調用遞歸查詢的查詢。如何使用遞歸查詢作爲子查詢?
我無法弄清楚該怎麼做。我想我可以通過使用遊標來做到這一點,在運行時準備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.
但是你能否建議更好的查詢?
是是是是是!這是遞歸查詢的第一天,我還沒有進入它們。非常感謝,這解決了我的問題! – LaBracca 2011-04-18 14:08:54