我正在嘗試使用 限制來自公共表運算式的遞回迭代量join,但無論如何它都會無限回圈。我究竟做錯了什么?
我不想要一個固定的迭代限制,而是根據count(*)表data動態限制:
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;
uj5u.com熱心網友回復:
V.count 和 D.count 都沒有在任何地方定義。你怎么期望它知道你在數什么?
您將必須做兩件事:1. 將資料表中的記錄數放入查詢中的每條記錄中,以及 2. 在您的查詢中創建一個遞增變數,每次遞增一個。
第一個是通過在您定義的 CTE 之前運行另一個 CTE 并將其結果連接到第二個 CTE 來完成的。
像這樣:
With Recursive tablecount AS (
Select count(*) as maxn from data
), myvalues AS (
Select name, year, salary, 1 as N, maxn
From data d Inner Join tablecount c
Union All
Select name, year, salary, v.N 1, v.maxn
From data d inner join myvalues v
On d.name = v.name
Where v.N<v.maxn
)
Select name, year, salary
From myvalues
第一個 CTE 將行數獲取到查詢中。第二個 CTE 是您的原始查詢,添加了欄位 N,跟蹤通過的次數,以及包含記錄計數的 maxn。WHERE 子句比較兩者;CTE 在沒有檢索到任何行時終止。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/528241.html
上一篇:sqlite排序順序和管道符號
下一篇:發布到資料庫的語法混淆
