可以說我有以下模式:CTE遞歸查詢和內部連接
person (person_id, person_account, name)
relationships (person_id, father_id)
purchases(person_account, total, type)
免責聲明:我沒有設計這個架構,我知道這是可怕的,所以我道歉。這也是一個例子,這更復雜。還要注意,這是一個我將在JDBCTemplate中使用的查詢,這就是我包含該標記的原因。
現在我想得到一個人的購買count
,他或她的兒子購買和他們的兒子購買等。我想要一個特定的起始點。
夫婦的事情,從迄今爲止我見過的例子不同:
- 一個特定的起點(讓我們說這是
person_account
)。 - 表
purchases
沒有person_id
字段,所以它使事情變得複雜。 - 我想要一個
count
而不是其他的東西。 - 我想過濾
type
的purchase
。 - 由於
father_id
關係在另一個表中,這意味着必須進行連接。再次,它是可怕的,但我不能改變數據庫,以包括在person
表father_id
字段。 - 如果一個人沒有父親,
relationships
表中沒有條目。這會使它更加複雜。
現在我讀過的例子中,我知道他們夫婦:
How to get all children of a parent and then their children using recursion in query
SQL Server recursive query
http://msdn.microsoft.com/en-us/library/ms186243.aspx
不過,我有問題理解出發點和落腳點。我的出發點可能有一個父親,所以不能爲空。基本上,我的終點應該從relationships
表中沒有條目的人那裏得到purchases
。
那麼我現在的想法是:
declare @id int = 234
;with CTEexample as (
select p.person_account, p.person_id, p.type, r.father_id from purchases as s
join person p on p.person_account = s.person_account
join relationships r on r.person_id = p.person_id
where r.person_id = @id
union all
select p.person_account, p.person_id, p.type, r_father_id from purchases as s
join person p on p.person_account = s.person_account
join relationships r on r.person_id = p.person_id
join CTEexample c on p.person_id = r.father_id
)
select count(*) from CTEexample
where type = 's'
但是,它是不工作的。
任何幫助,將不勝感激。
不能肯定,但嘗試扭轉你的加盟CTEexample。因此,在p.person_id = r.father_id上加入CTEexample c變爲在r.person_id = p.father_id上加入CTEexample c – 2013-02-19 23:15:20