[Pgsql-ayuda] Buscando nulos en campos que referencían a otras tablas

Gunnar Wolf gwolf@campus.iztacala.unam.mx
Mon, 2 Dec 2002 12:27:31 -0600 (CST)


Hola mundo,

A ver... Tengo una duda por acá digna de ustedes: Creé una base en la cual
tengo una tabla así:


CREATE TABLE "sess_quest" (
  "sess_id" integer REFERENCES sess(id),
  "quest_id" integer REFERENCES quest(id),
  "opt_id" integer REFERENCES opt(id) DEFAULT NULL,
  PRIMARY KEY("sess_id", "quest_id")
);

Crear una sesión en el sistema significa crear un registro en la tabla
sess, y un número determinado de registros en esta tabla sess_quest,
ligando la sesión a una serie de preguntas. Cada pregunta tiene ligada
varias opciones, de las cuales con esta tabla puedo elegir una.

Todo bien. Acá, por ejemplo, veo las preguntas relativas a una sesión,
tanto las que ya fueron respondidas como las que aún no:

exam=# select * from sess_quest where sess_id=1;
 sess_id | quest_id | opt_id
---------+----------+--------
       1 |        5 |
       1 |        6 |
       1 |        8 |
       1 |        4 |
       1 |       17 |
       1 |       19 |
       1 |       29 |
       1 |       15 |     39
       1 |        2 |      4
       1 |       18 |     44
       1 |       14 |     37
(11 rows)

Ahora, cuando quiero seleccionar las preguntas que no han sido
respondidas:

exam=# select * from sess_quest where opt_id = NULL;
 sess_id | quest_id | opt_id
---------+----------+--------
(0 rows)

He estado jugando con casi cualquier combinación, incluyendo cosas
extrañas como esta:

exam=# select * from sess_quest where opt_id > 0 or opt_id <= 0;
 sess_id | quest_id | opt_id
---------+----------+--------
       1 |       15 |     39
       1 |        2 |      4
       1 |       18 |     44
       1 |       14 |     37
(4 rows)

Y no le encuentro la lógica... Tal vez por estar amarrado el opt_id a otra
tabla - pero no encuentro una manera limpia de representar esto. ¿Alguien
tiene alguna idea? Estoy usando PostgreSQL sobre Debian/i386 (probé con la
versión 7.2.3-3 y 7.2.1-2, sobre Woody y Sid respectivamente).

Gracias, y saludos.

-- 
Gunnar Wolf - gwolf@campus.iztacala.unam.mx - (+52-55)5623-1118
PGP key 1024D/8BB527AF 2001-10-23
Fingerprint: 0C79 D2D1 2C4E 9CE4 5973  F800 D80E F35A 8BB5 27AF