PostgreSQL 13で、下記のデータを作成しました。
各レコードが、自身の前後のレコード番号のカラムを持っています。
※1・2・3は、1→2→3の順に連結されており、4・7は、存在するどのレコードとも連結されていません(5・6は存在しない)
DDL
1CREATE TABLE LINKED_LIST_TABLE(num INTEGER, contents TEXT, prevnum INTEGER, nextnum INTEGER); 2 3INSERT INTO LINKED_LIST_TABLE VALUES(2,'I am 2',1,3); 4INSERT INTO LINKED_LIST_TABLE VALUES(1,'I am 1',null,2); 5INSERT INTO LINKED_LIST_TABLE VALUES(3,'I am 3',2,null); 6INSERT INTO LINKED_LIST_TABLE VALUES(4,'I am 4',null,5); 7INSERT INTO LINKED_LIST_TABLE VALUES(7,'I am 7',6,null);
全データを取得すると、下記の結果になります。
SELECT
1SELECT num, contents, prevnum, nextnum FROM LINKED_LIST_TABLE ORDER BY num;
|num|contents|prevnum|nextnum|
|:--|:--:|--:|
|1|I am 1|null|2|
|2|I am 2|1|3|
|3|I am 3|2|null|
|4|I am 4|null|5|
|7|I am 7|6|null|
この時、1・2・3のどの番号を与えても以下の結果を得るには、どのようなクエリ(WITH RECURSIVE)を書けばよいでしょうか?
|num|contents|prevnum|nextnum|
|:--|:--:|--:|
|1|I am 1|null|2|
|2|I am 2|1|3|
|3|I am 3|2|null|
回答2件
あなたの回答
tips
プレビュー