Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Damian BonaldoDate: 2006-07-26 12:17:31
Subject: Inicio
Previous:From: Agustin CasivaDate: 2006-07-26 10:34:55
Subject: Re: ¿ desactivar Autocommit ?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group