Thread: how does NOT work?

how does NOT work?

From
tony
Date:
Stange one

select count(*) from individu

count
18417

select count(*) from individu where type2 like 'a%'

count
12619

select count(*) from individu where type2 not like 'a%'

count
81

Clues?

Cheers

Tony Grant

--
RedHat Linux on Sony Vaio C1XD/S
http://www.animaproductions.com/linux2.html
Macromedia UltraDev with PostgreSQL
http://www.animaproductions.com/ultra.html


Re: how does NOT work?

From
"Nigel J. Andrews"
Date:
On 24 Apr 2002, tony wrote:

> Stange one
>
> select count(*) from individu
>
> count
> 18417
>
> select count(*) from individu where type2 like 'a%'
>
> count
> 12619
>
> select count(*) from individu where type2 not like 'a%'
>
> count
> 81
>
> Clues?

NULLs?

:)

--
Nigel J. Andrews
Director

---
Logictree Systems Limited
Computer Consultants


Re: how does NOT work?

From
Jean-Luc Lachance
Date:
Tony,
 you forgot the NULL entries.

Add the result of:
select count(*) from individu where type2 is null

JLL

tony wrote:
>
> Stange one
>
> select count(*) from individu
>
> count
> 18417
>
> select count(*) from individu where type2 like 'a%'
>
> count
> 12619
>
> select count(*) from individu where type2 not like 'a%'
>
> count
> 81
>
> Clues?
>
> Cheers
>
> Tony Grant
>
> --
> RedHat Linux on Sony Vaio C1XD/S
> http://www.animaproductions.com/linux2.html
> Macromedia UltraDev with PostgreSQL
> http://www.animaproductions.com/ultra.html
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org

Re: how does NOT work?

From
tony
Date:
On Wed, 2002-04-24 at 17:22, Nigel J. Andrews wrote:

> > select count(*) from individu
> >
> > count
> > 18417
> >
> > select count(*) from individu where type2 like 'a%'
> >
> > count
> > 12619
> >
> > select count(*) from individu where type2 not like 'a%'
> >
> > count
> > 81
> >
> > Clues?
>
> NULLs?

the cells are either empty or contain a word that doesn't start with "a"
or a -

If I do it with two letters it works just fine so I guess I'll just put
another "a" in front

Cheers

Tony Grant

--
RedHat Linux on Sony Vaio C1XD/S
http://www.animaproductions.com/linux2.html
Macromedia UltraDev with PostgreSQL
http://www.animaproductions.com/ultra.html


Re: how does NOT work?

From
"ARP"
Date:
I guess select count(*) from individu where type2 is null will return 5717 (18417-12619-81)
Arnaud

----- Original Message -----
From: "tony" <tony@animaproductions.com>
To: "postgres list" <pgsql-general@postgresql.org>
Sent: Wednesday, April 24, 2002 5:19 PM
Subject: [GENERAL] how does NOT work?


Stange one

select count(*) from individu

count
18417

select count(*) from individu where type2 like 'a%'

count
12619

select count(*) from individu where type2 not like 'a%'

count
81

Clues?

Cheers

Tony Grant

--
RedHat Linux on Sony Vaio C1XD/S
http://www.animaproductions.com/linux2.html
Macromedia UltraDev with PostgreSQL
http://www.animaproductions.com/ultra.html


---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org



Re: how does NOT work?

From
tony
Date:
On Wed, 2002-04-24 at 17:27, Jean-Luc Lachance wrote:
> Tony,
>  you forgot the NULL entries.
>
> Add the result of:
> select count(*) from individu where type2 is null

The null and ones that don't start with 'a' are the ones I want. I just
wanted to say "list all the individuals who don't have a type2 that
starts with a".

It works if I use more than one character (all the "au%" or all the
"ar%"). Nowhere do I read that there is a 2 character limitation on
wildcard selects.

Cheers

Tony Grant

--
RedHat Linux on Sony Vaio C1XD/S
http://www.animaproductions.com/linux2.html
Macromedia UltraDev with PostgreSQL
http://www.animaproductions.com/ultra.html


Re: how does NOT work?

From
tony
Date:
On Wed, 2002-04-24 at 17:31, ARP wrote:
> I guess select count(*) from individu where type2 is null will return 5717 (18417-12619-81)

OK so I trashed the null values

Still don't understand the logic - I just want cells that don't start
with "a" I don't care if they contain null values or not.

But I will be rewriting everything so that there is a default value in
each and every cell from now on.

Thanks

Cheers

Tony

--
RedHat Linux on Sony Vaio C1XD/S
http://www.animaproductions.com/linux2.html
Macromedia UltraDev with PostgreSQL
http://www.animaproductions.com/ultra.html


Re: how does NOT work?

From
"ARP"
Date:
> I guess select count(*) from individu where type2 is null will return 5717 (18417-12619-81)

>Still don't understand the logic - I just want cells that don't start
>with "a" I don't care if they contain null values or not.

Your answer is :

select count(*) from individu where type2 is null or type2 not like 'a%'

otherwise you trash the null values as you said :-)

Arnaud


Re: how does NOT work?

From
"Ian Harding"
Date:
I would discourage you from plugging in a default value if the true value is "unknown."  I recently had to put the
nullsback into a database where they had used 0 (zero) to represent "no evaluation" in a "score" column.  Well, they
triedaveraging the values and got a low value.  The zeroes figured into the average, where nulls would not. 

Nulls are worth the trouble sometimes.

- Ian

>>> tony <tony@animaproductions.com> 04/24/02 08:47AM >>>
On Wed, 2002-04-24 at 17:31, ARP wrote:
> I guess select count(*) from individu where type2 is null will return 5717 (18417-12619-81)

OK so I trashed the null values

Still don't understand the logic - I just want cells that don't start
with "a" I don't care if they contain null values or not.

But I will be rewriting everything so that there is a default value in
each and every cell from now on.

Thanks

Cheers

Tony

--
RedHat Linux on Sony Vaio C1XD/S
http://www.animaproductions.com/linux2.html
Macromedia UltraDev with PostgreSQL
http://www.animaproductions.com/ultra.html


---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html


Re: how does NOT work?

From
tony
Date:
On Wed, 2002-04-24 at 17:55, ARP wrote:
> > I guess select count(*) from individu where type2 is null will return 5717 (18417-12619-81)
>
> >Still don't understand the logic - I just want cells that don't start
> >with "a" I don't care if they contain null values or not.

> select count(*) from individu where type2 is null or type2 not like 'a%'

"or" works here but not in some of the more complex joins I am doing
elsewhere. I will be using "-" and "0" a lot more from now on!

Thanks again

Tony

--
RedHat Linux on Sony Vaio C1XD/S
http://www.animaproductions.com/linux2.html
Macromedia UltraDev with PostgreSQL
http://www.animaproductions.com/ultra.html


Re: how does NOT work?

From
"Joel Burton"
Date:
> Still don't understand the logic - I just want cells that don't start
> with "a" I don't care if they contain null values or not.
>
> But I will be rewriting everything so that there is a default value in
> each and every cell from now on.

The logic is this: in SQL, NULL is __NOT__ the same thing as 'empty'. It
means 'unknown'. And when you ask 'how many names start with A', you won't
get the names that are NULL (read: unknown). When you ask 'How many names DO
NOT start with A', you __still__ won't get the names that are NULL (read:
unknown), since, as they're unknown, it's impossible to say if they start
with A or not. It might seem pedantic, but very straightforward and
logically correct.

You can say either

WHERE column NOT LIKE 'a%' or column IS NULL

or

WHERE ( column LIKE 'a%' ) IS NOT TRUE;

The first is more clear to most people as it makes the NULL exception
explicit and obvious.


Re: how does NOT work?

From
"Joel Burton"
Date:
... or see my answer a second ago about (c LIKE 'a%')  IS NOT TRUE which
will also work.

Joel BURTON | joel@joelburton.com | joelburton.com | aim: wjoelburton
Knowledge Management & Technology Consultant

> -----Original Message-----
> From: pgsql-general-owner@postgresql.org
> [mailto:pgsql-general-owner@postgresql.org]On Behalf Of tony
> Sent: Wednesday, April 24, 2002 12:06 PM
> To: ARP
> Cc: postgres list
> Subject: Re: [GENERAL] how does NOT work?
>
>
> On Wed, 2002-04-24 at 17:55, ARP wrote:
> > > I guess select count(*) from individu where type2 is null
> will return 5717 (18417-12619-81)
> >
> > >Still don't understand the logic - I just want cells that don't start
> > >with "a" I don't care if they contain null values or not.
>
> > select count(*) from individu where type2 is null or type2 not like 'a%'
>
> "or" works here but not in some of the more complex joins I am doing
> elsewhere. I will be using "-" and "0" a lot more from now on!
>
> Thanks again
>
> Tony
>
> --
> RedHat Linux on Sony Vaio C1XD/S
> http://www.animaproductions.com/linux2.html
> Macromedia UltraDev with PostgreSQL
> http://www.animaproductions.com/ultra.html
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>


Re: how does NOT work?

From
"Nigel J. Andrews"
Date:
On 24 Apr 2002, tony wrote:

> On Wed, 2002-04-24 at 17:55, ARP wrote:
> > > I guess select count(*) from individu where type2 is null will return 5717 (18417-12619-81)
> >
> > >Still don't understand the logic - I just want cells that don't start
> > >with "a" I don't care if they contain null values or not.
>
> > select count(*) from individu where type2 is null or type2 not like 'a%'
>
> "or" works here but not in some of the more complex joins I am doing
> elsewhere. I will be using "-" and "0" a lot more from now on!
>

I don't understand what you're saying now can we just restate the situation.

You have:

      Query                                                    Giving
     --------                                                ----------
 SELECT count(*) from individu                                   T
 SELECT count(*) from individu WHERE type2 like 'a%'             x
 SELECT count(*) from individu WHERE type2 not like 'a%'         y

 where x + y != T

and, here is where I get uncertain:

 SELECT count(*) from individu WHERE type2 like 'ar%'            v
 SELECT count(*) from individu WHERE type2 not like 'ar%'        w

where v + w == T

But in another message you imply that you did have nulls present, so was your
'two letter' test incorrectly stated or was it that you weren't aware that
NULLs existed? (Only asking because although I can't see it happening if there
weren't any NULLs there must be a bug)


--
Nigel J. Andrews
Director

---
Logictree Systems Limited
Computer Consultants