可以说我有以下模式: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