[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