我正在使用connect by尝试以下查询,但我收到了关系错误,但是它还没有完成,我不认为还有其他方法可以做到这一点。
这是查询
select 3*level as X from dual
start with 1
connect by prior X < 15;
我想得到如下结果:
3
6
9
12
..
..
45
答案 0 :(得分:3)
尝试以下
SELECT 3 * LEVEL mult
FROM DUAL
CONNECT BY LEVEL <= 15;
输出
╔══════╗
║ mult ║
╠══════╣
║ 3 ║
║ 6 ║
║ 9 ║
║ 12 ║
║ 15 ║
║ 18 ║
║ 21 ║
║ 24 ║
║ 27 ║
║ 30 ║
║ 33 ║
║ 36 ║
║ 39 ║
║ 42 ║
║ 45 ║
╚══════╝
答案 1 :(得分:1)
只是为了解释你所看到的内容,以供将来参考:
select 3*level as X from dual
start with 1
connect by prior X < 15;
ORA-00920: invalid relational operator
Error at Line: 3 Column: 1
该错误实际上是抱怨您的start with
子句,该子句必须具有条件; 1
仅仅是一个字面值,不能用作条件(它不能评估为&#34; true&#34;或&#34; false&#34;)。如果我们修复它现在是一个条件:
select 3*level as X from dual
start with 1 = 1
connect by prior X < 15;
ORA-00904: "X": invalid identifier
Error at Line: 3 Column: 18
现在,问题是您的connect by
条件指的是X
,它不是源数据中的列;遗憾的是,您不能在此处引用select
子句中定义的别名。
通常情况下,您会将X
替换为实际的表达式,例如3*level
- 但在这种情况下,由于您无法在prior
表达式中引用伪列,因此仍然无法正常工作。
相反,您可以这样做:
select 3*level as X from dual
start with 1 = 1
connect by level < 15;
显然,start with 1 = 1
是多余的,可以删除;因此你得到了user75ponic提出的答案,它的工作正常。