gpt4 book ai didi

postgresql - 在postgresql中使用递归创建多个递增列

转载 作者:行者123 更新时间:2023-11-29 13:18:09 24 4
gpt4 key购买 nike

我正在尝试创建一个包含以下列的表格:

enter image description here

我想使用递归表来完成这项工作。但是,以下代码会出现以下错误:

'ERROR: column "b" does not exist'

WITH recursive numbers AS 
(
SELECT 1,2,4 AS a, b, c
UNION ALL
SELECT a+1, b+1, c+1
FROM Numbers
WHERE a + 1 <= 10
)
SELECT * FROM numbers;

我被卡住了,因为当我只包含一列时,这非常有效。为什么多列会出错?

最佳答案

这似乎是一个简单的语法问题:您错误地为列设置了别名。 ( SELECT 1,2,4 AS a, b, c ) 不正确。您的尝试有 5 列:1,2,a,b,c

将其分解为:Select 1,2,4 as a,b,c你看到了错误但是 Select 1 a,2 b,4 c工作正常。

b 在基本选择中是未知的,因为它被解释为字段名称;但是不存在具有该字段的表。此外,联合会失败,因为您在基础中有 5 个字段,在递归联合中有 3 个。

演示:http://rextester.com/IUWJ67486

可以在选择之外定义列,从而更易于管理或更改名称。

WITH recursive numbers (a,b,c) AS 
(
SELECT 1,2,4
UNION ALL
SELECT a+1, b+1, c+1
FROM Numbers
WHERE a + 1 <= 10
)
SELECT * FROM numbers;

或这种在内部给字段起别名的方法,因此将使用第一个选择列的名称。 (a,b,c) 与 somereallylongalias... 在联合查询中。应该注意的是,不仅列的名称源自联合集中的第一个查询;还有列的数据类型;其中,必须在两个查询之间匹配。

WITH recursive numbers  AS 
(
SELECT 1 as a ,2 as b,4 as c
UNION ALL
SELECT a+1 someReallyLongAlias
, b+1 someReallyLongAliasAgain
, c+1 someReallyLongAliasYetAgain
FROM Numbers
WHERE a<5
)
SELECT * FROM numbers;

最后,如果你真的想在 5 处停止,那么 where 子句应该是 WHERE a < 5 .该图像描述了这一点,而查询没有;所以不确定你的结局是什么。

关于postgresql - 在postgresql中使用递归创建多个递增列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com