Problema con consulta simple

From: Sergio <ximelis(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Problema con consulta simple
Date: 2007-02-28 11:23:45
Message-ID: 1677675e0702280323r1b81d00fpb726f0dbb85d93d9@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola es mi primera consulta a la lista, primero felicitaros a todos
por el alto nivel de esta lista.

Estoy haciendo pruebas con PostgreSQL sólo para aprender y me he
encontrado con un comportamiento extraño en una consulta simple, estoy
ejecutando un PostgreSQL 8.2.1 sobre Debian Etch para AMD64 que me he
compilado yo.

El problema es el siguiente:

He creado una tabla para intentar hacer consultas recursivas

pruebas=# create table delegaciones (
id_delegacion serial primary key,
nombre varchar,
padre int references delegaciones(id_delegaciones)
);

He insertado unos cuantos valores con :

pruebas=# INSERT INTO delegaciones (nombre, padre) values ('XXXX',
(select id_delegacion from delegaciones where nombre='YYYYYY'));

Al final los valores en la tabla son los siguientes:

pruebas=# select * from delegaciones;
id_delegacion | nombre | padre
---------------+---------------+-------
1 | principal | 1
2 | Barcelona | 1
3 | madrid | 1
4 | gerona | 1
5 | lleida | 1
6 | rubi | 2
7 | sant cugat | 2
8 | terrassa | 2
9 | castellana | 3
10 | lavapies | 3
11 | ximelis | 6
12 | can serrafosa | 6
13 | casa | 11
(13 filas)

Duración: 0,302 ms

Ahoa ejecuto unas consultas simples

pruebas=# select * from delegaciones where padre in (select
id_delegacion from delegaciones where padre = 1);
id_delegacion | nombre | padre
---------------+------------+-------
1 | principal | 1
2 | Barcelona | 1
3 | madrid | 1
4 | gerona | 1
5 | lleida | 1
6 | rubi | 2
7 | sant cugat | 2
8 | terrassa | 2
9 | castellana | 3
10 | lavapies | 3
(10 filas)

Duración: 0,474 ms

pruebas=# select * from delegaciones where padre in (select
id_delegacion from delegaciones where padre = 2);
id_delegacion | nombre | padre
---------------+---------------+-------
11 | ximelis | 6
12 | can serrafosa | 6
(2 filas)

Duración: 0,477 ms
pruebas=#

Y aqui está el problema, cuando el padre es 3 no encuentra nada

pruebas=# select * from delegaciones where padre in (select
id_delegacion from delegaciones where padre = 3);
id_delegacion | nombre | padre
---------------+--------+-------
(0 filas)

Duración: 0,462 ms

Sin embargo si ejecuto solo la parte final de la consulta si que lo encuentra:

pruebas=# select id_delegacion from delegaciones where padre = 3;
id_delegacion
---------------
9
10
(2 filas)

Duración: 0,325 ms

La verdad es que no tengo idea de por que de este comportamiento,
llevo un rato peleando y no lo veo.

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Sergio 2007-02-28 11:44:13 Problema con consulta simple
Previous Message Manuel Trujillo 2007-02-28 09:11:27 Re: Bases Remotas y sincronizacion