1

我有下表实现了一个链表。我想从 rate_sequence_id 为 1 开始查询,并获取链接到它的下一条记录,在本例中为 30。所以查询应该返回两行(rate_sequence_id 为 1 和 30)。

但是,以下查询要么仅返回 1 行,要么返回“循环”错误,具体取决于 CONNECT BY 子句中的哪一列。

我想用这些数据做些什么?

SELECT * FROM TEST
CONNECT BY PRIOR RATE_SEQUENCE_ID = NEXT_RATE
START WITH RATE_SEQUENCE_ID = 1

测试数据:

CREATE TABLE TEST (
  RATE_SEQUENCE_ID      NUMBER(10,0),
  NEXT_RATE             NUMBER(10,0),
  DURATION              NUMBER,
  RATE                  NUMBER
);  


Insert into TEST (RATE_SEQUENCE_ID,NEXT_RATE,DURATION,RATE) values (50,51,28,0.99);
Insert into TEST (RATE_SEQUENCE_ID,NEXT_RATE,DURATION,RATE) values (51,51,112,9.99);
Insert into TEST (RATE_SEQUENCE_ID,NEXT_RATE,DURATION,RATE) values (1,30,28,0.99);
Insert into TEST (RATE_SEQUENCE_ID,NEXT_RATE,DURATION,RATE) values (30,30,112,14.99);
Insert into TEST (RATE_SEQUENCE_ID,NEXT_RATE,DURATION,RATE) values (0,0,0,0);
Insert into TEST (RATE_SEQUENCE_ID,NEXT_RATE,DURATION,RATE) values (31,0,30,0);
4

1 回答 1

1

所以这是你的问题:

Insert into TEST (RATE_SEQUENCE_ID,NEXT_RATE,DURATION,RATE) values (30,30,112,14.99);

30 与自身相连。这是对的还是错字?

如果该数据是正确的并且您使用的是现代版本的 Oracle,您可以使用 NOCYCLE 子句来退出循环。这绝对是在 10g 中(也许在 9i 中,我的记忆在这里失败了)。 了解更多

SELECT * FROM TEST
CONNECT BY NOCYCLE PRIOR RATE_SEQUENCE_ID = NEXT_RATE
START WITH RATE_SEQUENCE_ID = 1
于 2013-04-12T13:38:48.060 回答