Обсуждение: no cond returns diff res than cond or !cond

Поиск
Список
Период
Сортировка

no cond returns diff res than cond or !cond

От
Markus Bertheau
Дата:
Good day,

feline=> select version();                           version                            
---------------------------------------------------------------PostgreSQL 7.0.2 on i686-pc-linux-gnu, compiled by gcc
2.95.2
(1 row)

feline=> select count(*) from produkte;count 
-------36405
(1 row)

feline=> select count(*) from produkte where artnummer != NULL or
artnummer = NULL;count 
-------36347
(1 row)

cenes_test=> select version();                          version                           
-------------------------------------------------------------PostgreSQL 7.1.3 on i686-pc-linux-gnu, compiled by GCC
2.96
(1 row)

cenes_test=> select count(*) from produkte;count 
-------36384
(1 row)

cenes_test=> select count(*) from produkte where artnummer = NULL or
artnummer != NULL;count 
-------36326
(1 row)

2nd query 58 less than first.

bug?

Markus Bertheau





Re: no cond returns diff res than cond or !cond

От
Stephan Szabo
Дата:
On 12 Nov 2001, Markus Bertheau wrote:

> cenes_test=> select version();
>                            version
> -------------------------------------------------------------
>  PostgreSQL 7.1.3 on i686-pc-linux-gnu, compiled by GCC 2.96
> (1 row)
>
> cenes_test=> select count(*) from produkte;
>  count
> -------
>  36384
> (1 row)
>
> cenes_test=> select count(*) from produkte where artnummer = NULL or
> artnummer != NULL;
>  count
> -------
>  36326
> (1 row)
>
> 2nd query 58 less than first.
>
> bug?

Probably not.  You don't want to compare to NULL (although there is a
hack which makes an explicit = NULL into the correct comparison), you
want to use IS NULL and IS NOT NULL.  Comparing to NULL returns an
unknown (neither true nor false) and negating that comparison still
returns unknown.  The hack is in there for compatibility with an
MS Access feature, and I think is optional in 7.2, and turns = NULL
into IS NULL, there's no equivalent hack for != NULL AFAIK.




Re: no cond returns diff res than cond or !cond

От
Haller Christoph
Дата:
Hi Markus, 
AFAIK the SQL standard says for querying columns to be NULL 
resp. NOT NULL 
select count(*) from produkte where artnummer is NULL or 
artnummer is NOT NULL ; 
Please try and let me know about your results. 
Regards, Christoph 
> 
> Good day,
> 
> feline=> select version();
>                             version                            
> ---------------------------------------------------------------
>  PostgreSQL 7.0.2 on i686-pc-linux-gnu, compiled by gcc 2.95.2
> (1 row)
> 
> feline=> select count(*) from produkte;
>  count 
> -------
>  36405
> (1 row)
> 
> feline=> select count(*) from produkte where artnummer != NULL or
> artnummer = NULL;
>  count 
> -------
>  36347
> (1 row)
> 
> cenes_test=> select version();
>                            version                           
> -------------------------------------------------------------
>  PostgreSQL 7.1.3 on i686-pc-linux-gnu, compiled by GCC 2.96
> (1 row)
> 
> cenes_test=> select count(*) from produkte;
>  count 
> -------
>  36384
> (1 row)
> 
> cenes_test=> select count(*) from produkte where artnummer = NULL or
> artnummer != NULL;
>  count 
> -------
>  36326
> (1 row)
> 
> 2nd query 58 less than first.
> 
> bug?
> 
> Markus Bertheau
> 
> 
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 3: if posting/reading through Usenet, please send an appropriate
> subscribe-nomail command to majordomo@postgresql.org so that your
> message can get through to the mailing list cleanly
>