lupti_du lupti_du - 1 month ago 8
SQL Question

recursive query in postgresql

I have the following table:

table 'users'

and I have the following query:

WITH RECURSIVE users_r AS (
SELECT user_id, parent_id, 0 as level
FROM users
WHERE parent_id is null
UNION ALL
SELECT u.user_id, u.parent_id, u.level + 1
FROM users u
INNER JOIN users_r
ON (u.parent_id = users_r.user_id)
)

SELECT * FROM users_r LIMIT 1000


I want to fill "level" column with depending on the count of ancestors. But my code isn't working. It fills rows only where parent_id is null.

Result of my code

Answer

It is a simple typo.

The recursive SELECT, immediately after the UNION ALL should not read

SELECT u.user_id, u.parent_id, u.level + 1

but

SELECT u.user_id, u.parent_id, users_r.level + 1

You would have noticed right away if you didn't have a level column in users.