RE: Comparar valores Nulos

From: Consuelo Marmolejo <consuelo_marmolejo(at)hotmail(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Comparar valores Nulos
Date: 2008-01-18 20:09:44
Message-ID: BAY139-W28F022DCA480D6C35D7592E2420@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Gracias por las respuestas pero con la respuesta al comparar: t1.nombre=t2.nombre and t1.prefesion=t2.profesion and t1.color=t2.color; es como usar el USING; con respecto a usar el IS NULL no entiendo como podria hacerlo en la consulta.
Dentro del ejemplo funciona por que un nulo es nulo, al igual que la instrucción: SELECT NOT NULL IS NOT NULL.
Si lo utilizo dentro de la consulta solo podría hacer algo como:

t1.profesion IS NOT NULL AND t2.profesion IS NOT NULL AND t1.profesion=t2.profesion

Qué daría el mismo resultado (o no entiendo tu idea de usar el IS NULL de forma correcta).

Mi idea era que tendría que hacer algo así:

SELECT DISTINCT ON(id_tabla1) id_tabla1, id_tabla2, nombre, t1.profesion, t1.color FROM tabla1 t1 INNER JOIN tabla2 t2 USING(nombre)
WHERE
(CASE WHEN (t1.profesion IS NULL) THEN '0'::varchar ELSE t1.profesion END)::varchar=(CASE WHEN (t2.profesion IS NULL) THEN '0'::varchar ELSE t2.profesion END)::varchar
AND (CASE WHEN (t1.color IS NULL) THEN '0'::varchar ELSE t1.color END)::varchar=(CASE WHEN (t2.color IS NULL) THEN '0'::varchar ELSE t2.color END)::varchar
ORDER BY id_tabla1;

Para lo cual obtengo la tabla a la que hago mención; pero hay algun par de tablas que tienen como unas 20 columnas donde tentativamente puede haber un valor NULL, así que al menos busco una manera más elegante de hacer esto.

Pero ahora que mencionan el estándar; es posible hacer esto? ó es una característica que postgres no puede realizar por ahora?

Y ahora que lo veo creo que debí dar al menos el código de este ejemplito que estoy dando por si alguien quiere probar una alternativa.

CREATE TABLE tabla1 (id_tabla1 integer, nombre varchar, profesion varchar, color varchar);
INSERT INTO tabla1 VALUES(1, 'Miguel', NULL, 'Azul');
INSERT INTO tabla1 VALUES(2, 'Alvaro', 'Analista', NULL);
INSERT INTO tabla1 VALUES(3, 'Jorge', 'Administrador', 'Rojo');
INSERT INTO tabla1 VALUES(4, 'Roberto', NULL, 'Violeta');
INSERT INTO tabla1 VALUES(5, 'Miriam', 'Secretaria', NULL);

CREATE TABLE tabla2 (id_tabla2 integer, nombre varchar, profesion varchar, color varchar);
INSERT INTO tabla2 VALUES(5, 'Miguel', NULL, 'Azul');
INSERT INTO tabla2 VALUES(4, 'Alvaro', 'Analista', NULL);
INSERT INTO tabla2 VALUES(2, 'Jorge', 'Administrador', 'Rojo');
INSERT INTO tabla2 VALUES(1, 'Roberto', NULL, 'Violeta');
INSERT INTO tabla2 VALUES(3, 'Miriam', 'Secretaria', NULL);

________________________________
> Date: Fri, 18 Jan 2008 15:24:52 -0300
> From: silvioq(at)gmail(dot)com
> To: consuelo_marmolejo(at)hotmail(dot)com
> Subject: Re: [pgsql-es-ayuda] Comparar valores Nulos
>
>
>
> Lamentablemente según las especificaciones del SQL, null = null te va a dar siempre falso. Tenés que usar null is null.
>
> Hacé esta prueba ...
>
> # select null = null;
> ?column?
> ----------
>
> (1 row)
>
> # select null is null;
> ?column?
> ----------
> t
> (1 row)
>
>
> Silvio

>>----------------------------------------
>> Date: Fri, 18 Jan 2008 15:21:48 -0300
>> From: agustingenoves(at)gmail(dot)com
>> To: consuelo_marmolejo(at)hotmail(dot)com
>> Subject: Re: [pgsql-es-ayuda] Comparar valores Nulos
>> CC: pgsql-es-ayuda(at)postgresql(dot)org
>>
>> probaste con
>> SELECT t1.id_tabla1, t2.id_tabla2, t1.nombre, t1.profesion, t1.color
>> FROM tabla1 t1 INNER JOIN tabla2 t2 on
>> t1.nombre=t2.nombre and
>> t1.prefesion=t2.profesion and
>> t1.color=t2.color
>>
>> no se si funciona pero probalo
>> El 18/01/08, Consuelo Marmolejo escribió:
>>>
>>> Que tal.
>>> Dentro de postgres no puedo comparar los valores nulos dentro de mis tablas; me explico con este ejemplo:
>>>
>>> Digamos que tenemos estas tablas:
>>>
>>> -- Tabla1 --
>>> id_tabla1 | nombre | profesion | color
>>> -----------+---------+---------------+---------
>>> 1 | Miguel | | Azul
>>> 2 | Alvaro | Análista |
>>> 3 | Jorge | Administrador | Rojo
>>> 4 | Roberto | | Violeta
>>> 5 | Miriam | Secretaria |
>>>
>>> -- Tabla2 --
>>> id_tabla2 | nombre | profesion | color
>>> -----------+---------+---------------+---------
>>> 5 | Miguel | | Azul
>>> 4 | Alvaro | Análista |
>>> 2 | Jorge | Administrador | Rojo
>>> 1 | Roberto | | Violeta
>>> 3 | Miriam | Secretaria |
>>>
>>> (Los espacios en blanco son valores NULL dentro de la tabla).
>>> Ahora si pueden observar lo único que cambia son los id's dentro de ambas tablas; al hacer la consulta:
>>>
>>> db_local2=# SELECT id_tabla1, id_tabla2, nombre, profesion, color FROM tabla1 INNER JOIN tabla2 USING(nombre, profesion, color);
>>>
>>> id_tabla1 | id_tabla2 | nombre | profesion | color
>>> -----------+-----------+--------+--------------------+-------
>>> 3 | 2 | Jorge | Administrador | Rojo
>>>
>>>
>>> El único resultado que trae es este.
>>> Si bien puedo hacer un "CASE" para columna que tentativamente tenga un valor nulo; no hay una forma más práctica?
>>> Alguna forma de hacer que postgres me tome en consideración los valores Nulos, para obtener este resultado:
>>>
>>> id_tabla1 | id_tabla2 | nombre | profesion | color
>>> -----------+-----------+----------+--------------------+---------
>>> 1 | 5 | Miguel | | Azul
>>> 2 | 4 | Alvaro | Análista |
>>> 3 | 2 | Jorge | Administrador | Rojo
>>> 4 | 1 | Roberto | | Violeta
>>> 5 | 3 | Miriam | Secretaria |
>>>
>>>
>>>
>>> _________________________________________________________________
>>> ¡Súper premios en nanometrajes subiendo tu video!
>>> http://cine.prodigymsn.com/nanometraje--
>>> TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo
>>>

_________________________________________________________________
¡Actúa tu película favorita y gana fabulosos premios!
http://cine.prodigymsn.com/nanometraje

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Silvio Quadri 2008-01-18 20:19:45 Re: Comparar valores Nulos
Previous Message Cesar Erices 2008-01-18 19:24:22 Re: Comparar valores Nulos