0

Oracle出力で生成されたのと同じ表示順序がpostgreSQLで必要です。次のOracleクエリと以下に示す出力を使用してみました

create table student(
std_id int, std_roll int
);


SELECT std_id, std_roll
FROM   student
CONNECT BY PRIOR std_id = std_roll;

オラクルの出力

オラクルの出力

対応する postgreSQL クエリと出力

create table student(
std_id int, std_roll int
);


INSERT into student values( 1, 0 );
INSERT into student values( 2, 1 );
INSERT into student values( 3, 1 );
INSERT into student values( 4, 2 );
INSERT into student values( 5, 2 );
INSERT into student values( 6, 3 );
INSERT into student values( 7, 4 );

 WITH RECURSIVE q AS (
 SELECT po.std_id,po.std_roll
 FROM student po
 UNION ALL
 SELECT po.std_id,po.std_roll
 FROM student po
 JOIN q ON q.std_id=po.std_roll
 )
 SELECT * FROM q;

postgreSQL 出力

postgreSQL 出力

oracle で生成されたのと同じ表示順序を postgreSQL で維持することは可能ですか?

4

1 に答える 1

1

投稿したデータから、Oracle では、ORDER SIBLINGS.

あなたのようなテーブルで:

create table student(
std_id int, std_roll int
);
INSERT into student values( 1, 0 );
INSERT into student values( 2, 1 );
INSERT into student values( 3, 1 );
INSERT into student values( 4, 2 );
INSERT into student values( 5, 2 );
INSERT into student values( 6, 3 );
INSERT into student values( 7, 4 );

これにより、必要な出力が得られます。

SELECT std_id, std_roll, level
FROM   student
CONNECT BY PRIOR std_id = std_roll
order siblings by std_id

Postgres では、この回答を使用して同じ結果を得ることができるはずです

于 2017-01-04T13:09:01.890 に答える