我试图使用join
限制公用表表达式的递归迭代次数,但无论如何它都会无限循环。我做错了什么?
我不想要一个固定的迭代限制,而是根据data
表的count(*)
动态限制:
create table data(
name varchar,
year integer,
salary double
);
insert into data values
('a',23, 4100),
('b',22, 1000),
('c',17, 2000);
with recursive myvalues as (
select name, year, salary from data d
union all
select d.name, d.year, d.salary from myvalues v
join data d on d.name = v.name
--where v.count <= d.count --error
) select * from myvalues order by name;
1条答案
按热度按时间dffbzjpn1#
V.count和D.count都没有在任何地方定义。你怎么能指望它知道你在数什么?
您必须做两件事:1.将数据表中的记录数添加到查询中的每条记录中;2.在查询中创建一个递增变量,该变量每次通过时都会递增一条。
第一个是通过在您定义的CTE之前运行另一个CTE并将其结果连接到第二个CTE来完成的。
就像这样:
第一个CTE获取查询中的行数。第二个CTE是您的原始查询,添加了字段N(跟踪通过的次数)和Maxn(合并记录计数)。WHERE子句比较两者;CTE在没有检索到行时终止。