No muestra datos si un campo relacionado está vacío.

From: Pablo Braulio <brulics(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: No muestra datos si un campo relacionado está vacío.
Date: 2006-07-26 10:55:09
Message-ID: 44C74A0D.2040406@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola a todos.

Estoy tratando de hacer una consulta que (aunque aparentemente es
simple) me está trayendo complicación.

Tengo la siguiente tabla:

\d recursos_programas
Tabla «public.recursos_programas»
Columna | Tipo |
Modificadores
----------------+-----------------------+-----------------------------------------------------------------
id | integer | not null default
nextval('recursos_programas_id_seq'::regclass)
nombre | character varying(75) | not null
programa | integer | not null
fichero | integer |
comentario | text |
afecta_fichero | boolean | default false
Índices:
«recursos_programas_pkey» PRIMARY KEY, btree (id)
Restricciones de llave foránea:
«recursos_programas_fichero_fkey» FOREIGN KEY (fichero) REFERENCES
ficheros(id) ON UPDATE CASCADE ON DELETE CASCADE
«recursos_programas_programa_fkey» FOREIGN KEY (programa)
REFERENCES programas(id) ON UPDATE CASCADE ON DELETE CASCADE

Y si hago la consulta siguiente:

select id, fichero from ficheros where empresa = '10' and id not
in(select fichero from recursos_programas where id = '11');
id | fichero
----+-----------------
79 | PROVEEDORES
80 | EMPLEADOS
81 | SELECC PERSONAL
82 | CONTACTOS
(4 filas)

Como veis, me devuelve resultados. Pero en el siguiente caso:

select id, fichero from ficheros where empresa = '10' and id not
in(select fichero from recursos_programas where id = '10');
id | fichero
----+---------
(0 filas)

No devuelve nada.

La diferencia está en que el campo "fichero" de la primera, contiene un
valor, y en el segundo caso, no.

SELECT * from recursos_programas;
id | nombre | programa | fichero | comentario | afecta_fichero
----+--------------------+----------+---------+------------+----------------
10 | PRUEBA SIN FICHERO | 36 | | dkdkd | f
11 | PRUEBA CON FICHERO | 36 | 78 | ddd | t

Lo que no acabo de entender, es el porque si hago la consulta segunda,
no me muestra los datos que pido de la tabla "ficheros", pues no están
en la tabla "recursos_programas".

Es decir, lo que pretendo es que me muestre los datos de la tabla
"ficheros" que no están en la tabla "recursos_programas". Como se puede
ver, en el primer caso funciona (pues el campo "fichero" tiene un
valor), pero en el segundo, no funciona (el campo está vacío). :-(

Espero me podáis ayudar.

Gracias.

--
----
Saludos

Pablo

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Damian Bonaldo 2006-07-26 12:17:31 Inicio
Previous Message Agustin Casiva 2006-07-26 10:34:55 Re: ¿ desactivar Autocommit ?