Pemikiran Anda salah untuk SQL. Jangan berpikir dalam hal loop dan kondisi dan variabel; sebagai gantinya, pikirkan tentang bagaimana menggambarkan data yang Anda inginkan. Bagian yang sulit adalah Anda ingin kueri merujuk ke hasilnya sendiri dan itulah yang CTE rekursif adalah untuk:
Anda sedang mencari sesuatu seperti ini:
with recursive path as (
select id, parent from T where id = 4
union all
select t.id, t.parent from T t join path p on t.id = p.parent
)
select id, parent
from path
Itu akan memberi Anda ini:
id | parent
----+--------
4 | 2
2 | 1
1 |
dan kemudian Anda dapat menyatukannya kembali di jalur yang akan lebih tertaut-list (atau apa pun yang sesuai dalam bahasa klien Anda) di luar database. Anda tidak harus menyertakan parent
tentu saja, tetapi menyertakannya akan membantu Anda memperbaiki "petunjuk".