Este tipo de consultas solo es posible ejecutarlas desde las versión 8.4 o posteriores, para aprender tenemos el siguiente ejemplo:Creamos la tabla autoreferenciada tomando como ejemplo nuestro país (departamentos y municipios):

CREATE TABLE localidad (
id SERIAL PRIMARY KEY,
nombreLocalidad VARCHAR,
parent_id INTEGER REFERENCES localidad(id)
);

Ejecutamos unos insert:

INSERT INTO localidad (nombreLocalidad, parent_id) VALUES
(‘El Salvador’, NULL),
(‘San Salvador’, 1),
(‘Soyapango’, 2),
(‘Col. San Jose’, 3),
(‘Col. Los Angeles’, 2),
(‘Calle 1’, 3),
(‘Calle 2’, 3),
(‘Calle principal’, 2),
(‘Pasaje 2’, 8);

En estos registros tenemos el país / el departamento / el municipio / 2 colonias / 3 calles / un pasaje

Consultamos la tabla;

WITH RECURSIVE path(nombreLocalidad, path, parent, id, parent_id) AS (
SELECT nombreLocalidad, ‘/’, NULL, id, parent_id FROM localidad WHERE id = 1
UNION
SELECT
localidad.nombreLocalidad,
parentpath.path || CASE parentpath.path WHEN ‘/’ THEN ” ELSE ‘/’ END || localidad.nombreLocalidad,
parentpath.path, localidad.id, localidad.parent_id
FROM localidad, path as parentpath
WHERE localidad.parent_id = parentpath.id
)
SELECT * FROM path;

El resultado es el siguiente:

pgAdmin

Anuncios