pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
Problem with "NOT IN (subquery)
3+ messages / 3 participants
[nested] [flat]

* Problem with "NOT IN (subquery)
@ 2005-11-13 06:27 Steve SAUTETNER <steve@sautetner.com>
  2005-11-13 09:16 ` Re: Problem with "NOT IN (subquery) Stephan Szabo <sszabo@megazone.bigpanda.com>
  2005-11-14 09:47 ` Re: Problem with "NOT IN (subquery) Christian Paul B. Cosinas <cpc@cybees.com>
  0 siblings, 2 replies; 3+ messages in thread

From: Steve SAUTETNER @ 2005-11-13 06:27 UTC (permalink / raw)
  To: pgsql-sql

Hi,

I have a table named "famille" whose structure and content is :

 famille_code | famille_mere_famille_code |  famille_libelle  |
famille_niveau
--------------+---------------------------+-------------------+-------------
---
 000000       |                           | Mhre              |
0
 I00001       | 000000                    | Composants        |
1
 IN0001       | I00001                    | Micro-processeurs |
2
 IN0002       | I00001                    | Mimoires RAM      |
2
 INS001       | IN0002                    | DDR-SDRAM         |
3
 INS002       | IN0002                    | DDR2-SDRAM        |
3
 INS003       | IN0002                    | SDR-SDRAM         |
3
 IN0003       | I00001                    | Cartes mhres      |
2
 IN0004       | I00001                    | Disques durs      |
2
 IN0005       | I00001                    | Cartes graphiques |
2
 IN0006       | I00001                    | Cartes son        |
2
 IN0007       | I00001                    | Riseau            |
2
 IN0008       | I00001                    | Lecteurs CD/DVD   |
2
 IN0009       | I00001                    | Graveurs CD/DVD   |
2
 IN0010       | I00001                    | Bontiers          |
2
 I00002       | 000000                    | Piriphiriques     |
1
 IN0011       | I00002                    | Cli USB           |
2
 IN0012       | I00002                    | Modems            |
2
 IN0013       | I00002                    | Imprimantes       |
2
(19 rows)

The first col is the family id and the second is the mother family id.
I would get a list of all families that are never in the col n°2, so
the families that aren't node but leaf.

The query, i made was "SELECT * FROM famille WHERE famille_code NOT IN
(SELECT DISTINCT famille_mere_famille_code FROM famille);"

But the DB returns 0 records instead of 15. If i use a list instead of a
subquery it works normaly but it's not easy to manage it like this.

So if anyone can help me please ...




^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* Re: Problem with "NOT IN (subquery)
  2005-11-13 06:27 Problem with "NOT IN (subquery) Steve SAUTETNER <steve@sautetner.com>
@ 2005-11-13 09:16 ` Stephan Szabo <sszabo@megazone.bigpanda.com>
  1 sibling, 0 replies; 3+ messages in thread

From: Stephan Szabo @ 2005-11-13 09:16 UTC (permalink / raw)
  To: Steve SAUTETNER <steve@sautetner.com>; +Cc: pgsql-sql


On Sun, 13 Nov 2005, Steve SAUTETNER wrote:

> Hi,
>
> I have a table named "famille" whose structure and content is :
>
>  famille_code | famille_mere_famille_code |  famille_libelle  |
> famille_niveau
> --------------+---------------------------+-------------------+-------------
> ---
>  000000       |                           | Mhre              |

Is that a NULL famille_mere_famille_code?

> The first col is the family id and the second is the mother family id.
> I would get a list of all families that are never in the col n°2, so
> the families that aren't node but leaf.
>
> The query, i made was "SELECT * FROM famille WHERE famille_code NOT IN
> (SELECT DISTINCT famille_mere_famille_code FROM famille);"
>
> But the DB returns 0 records instead of 15. If i use a list instead of a
> subquery it works normaly but it's not easy to manage it like this.
>
> So if anyone can help me please ...

In the case where the subselect returns a NULL, the behavior of IN and NOT
IN is rather unfortunate. A NOT IN B is basically NOT(A IN B) and A IN B
is basically A =ANY B IIRC. However, A=ANY B only returns false if A = Bi
returns false for all Bi contained in B and A = NULL returns unknown, not
false, so NOT IN cannot return true if the subselect contains a NULL.

If that is a null above, probably the best solution is to exclude NULLs
from the subselect results.



^ permalink  raw  reply  [nested|flat] 3+ messages in thread

* Re: Problem with "NOT IN (subquery)
  2005-11-13 06:27 Problem with "NOT IN (subquery) Steve SAUTETNER <steve@sautetner.com>
@ 2005-11-14 09:47 ` Christian Paul B. Cosinas <cpc@cybees.com>
  1 sibling, 0 replies; 3+ messages in thread

From: Christian Paul B. Cosinas @ 2005-11-14 09:47 UTC (permalink / raw)
  To: 'Steve SAUTETNER' <steve@sautetner.com>; pgsql-sql

I think that query should work. Hmmm... Weird...
I tried that in my database and it is working.

What do you mean by this? " If i use a list instead of a subquery it works
normaly but it's not easy to manage it like this."

-----Original Message-----
From: pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-owner@postgresql.org]
On Behalf Of Steve SAUTETNER
Sent: Sunday, November 13, 2005 6:27 AM
To: pgsql-sql@postgresql.org
Subject: [SQL] Problem with "NOT IN (subquery)

Hi,

I have a table named "famille" whose structure and content is :

 famille_code | famille_mere_famille_code |  famille_libelle  |
famille_niveau
--------------+---------------------------+-------------------+---------
--------------+---------------------------+-------------------+----
---
 000000       |                           | Mhre              |
0
 I00001       | 000000                    | Composants        |
1
 IN0001       | I00001                    | Micro-processeurs |
2
 IN0002       | I00001                    | Mimoires RAM      |
2
 INS001       | IN0002                    | DDR-SDRAM         |
3
 INS002       | IN0002                    | DDR2-SDRAM        |
3
 INS003       | IN0002                    | SDR-SDRAM         |
3
 IN0003       | I00001                    | Cartes mhres      |
2
 IN0004       | I00001                    | Disques durs      |
2
 IN0005       | I00001                    | Cartes graphiques |
2
 IN0006       | I00001                    | Cartes son        |
2
 IN0007       | I00001                    | Riseau            |
2
 IN0008       | I00001                    | Lecteurs CD/DVD   |
2
 IN0009       | I00001                    | Graveurs CD/DVD   |
2
 IN0010       | I00001                    | Bontiers          |
2
 I00002       | 000000                    | Piriphiriques     |
1
 IN0011       | I00002                    | Cli USB           |
2
 IN0012       | I00002                    | Modems            |
2
 IN0013       | I00002                    | Imprimantes       |
2
(19 rows)

The first col is the family id and the second is the mother family id.
I would get a list of all families that are never in the col n°2, so the
families that aren't node but leaf.

The query, i made was "SELECT * FROM famille WHERE famille_code NOT IN
(SELECT DISTINCT famille_mere_famille_code FROM famille);"

But the DB returns 0 records instead of 15. If i use a list instead of a
subquery it works normaly but it's not easy to manage it like this.

So if anyone can help me please ...


---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster


I choose Polesoft Lockspam to fight spam, and you?
http://www.polesoft.com/refer.html    




^ permalink  raw  reply  [nested|flat] 3+ messages in thread


end of thread, other threads:[~2005-11-14 09:47 UTC | newest]

Thread overview: 3+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2005-11-13 06:27 Problem with "NOT IN (subquery) Steve SAUTETNER <steve@sautetner.com>
2005-11-13 09:16 ` Stephan Szabo <sszabo@megazone.bigpanda.com>
2005-11-14 09:47 ` Christian Paul B. Cosinas <cpc@cybees.com>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox