使用Oracle SQL生成3的倍数至45时connect by查询报错求助
解决Oracle CONNECT BY 查询的关联错误问题
首先得说清楚你原查询出问题的核心原因:你在CONNECT BY子句里用了X这个别名,但数据库执行SQL的顺序是先处理CONNECT BY逻辑,再解析SELECT里的列定义,这时候X还没被定义,数据库根本识别不了它,自然会报关联错误。而且这里你其实不需要用PRIOR关键字——PRIOR是用来处理树形结构里父节点和子节点的关联关系的,你只是要生成一个等差序列,完全用不上它。
想要得到你期望的3、6、9...45的结果,直接控制level伪列的范围就可以了,正确的SQL写法如下:
SELECT 3 * level AS X FROM dual CONNECT BY level <= 15;
解释一下:level是Oracle递归查询里的伪列,代表当前的层级数,从1开始递增。我们让它从1到15,每一层乘以3,就正好得到你想要的3的倍数序列,直到45。
如果你更倾向于基于生成的数值来终止序列(而不是固定层级数),也可以把计算逻辑直接写在CONNECT BY的条件里,不用别名:
SELECT 3 * level AS X FROM dual CONNECT BY 3 * level <= 45;
这两种写法都能得到你想要的结果,第一种更直观,第二种则是通过目标数值来控制终止条件,按需选择就行。
内容的提问来源于stack exchange,提问作者JagaSrik
相关产品推荐
相关产品推荐

