Suy nghĩ của bạn đối với SQL là sai. Đừng nghĩ về vòng lặp và điều kiện và biến; thay vào đó, hãy nghĩ về cách mô tả dữ liệu bạn muốn. Phần khó là bạn muốn truy vấn tham chiếu đến kết quả của chính nó và đó là điều CTE đệ quy dành cho:
Bạn đang tìm kiếm một cái gì đó như thế này:
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
Điều đó sẽ cung cấp cho bạn điều này:
id | parent
----+--------
4 | 2
2 | 1
1 |
và sau đó bạn có thể kết hợp chúng lại với nhau theo một đường dẫn có thể liên kết với danh sách hơn (hoặc bất cứ điều gì phù hợp với ngôn ngữ khách hàng của bạn) bên ngoài cơ sở dữ liệu. Bạn không cần phải bao gồm parent
tất nhiên, nhưng bao gồm cả nó sẽ giúp bạn sửa chữa các "con trỏ".