Hi, Thomas.


I believe it is because of your WHERE clause, which is filtering out the nulls 
from hp table.

According to

WHERE

hp.poste_idposte = 275



You only want registers that have hp.poste_idposte = 275, not the null ones.



HTH



Best,

Oliveiros

  ----- Original Message ----- 
  From: Thomas BOURIMECH 
  To: 'pgsql-sql@postgresql.org' 
  Sent: Wednesday, April 21, 2010 1:29 PM
  Subject: [SQL] LEFT OUTER JOIN issue


  Hi  everyone, here is my problem : 

   

  I got two tables :

   

  CREATE TABLE "public"."calendar_temp" (

    "id" SERIAL, 

    "dat" DATE, 

    "heur" TIME WITHOUT TIME ZONE, 

    CONSTRAINT "calendar_temp_pkey" PRIMARY KEY("id")

  ) WITHOUT OIDS;

   

   

  CREATE TABLE "public"."h_part" (

    "idh" SERIAL, 

    "poste_idposte" INTEGER NOT NULL, 

    "t" NUMERIC(4,1), 

    "heuremesure" TIME WITHOUT TIME ZONE, 

    "datmesure" DATE, 

    CONSTRAINT "h_part_datmesure_key" UNIQUE("datmesure", "heuremesure", 
"poste_idposte"), 

    CONSTRAINT "h_part_pkey" PRIMARY KEY("idh"), 

    CONSTRAINT "h_part_fk" FOREIGN KEY ("poste_idposte")

    REFERENCES "public"."poste"("idposte")

    ON DELETE NO ACTION

    ON UPDATE NO ACTION

    NOT DEFERRABLE

  ) WITHOUT OIDS;

   

   

  Data in table are like this :

   

  calendar_temp

  -----------------

  id            dat                         heur

  1             15/03/2008         0:00

  2             15/03/2008         3:00

  3             15/03/2008         6:00

  4             15/03/2008         9:00

  5             15/03/2008         12:00

  6             15/03/2008         15:00

   

  h_part

  -----------------

  idh         poste_idposte  t              heuremesure   datmesure

  5001      275                        8,3          0:00                       
15/03/2008

  5002      275                        12           3:00                       
15/03/2008

  5003      275                        15           6:00                       
15/03/2008

  5004      275                        18           9:00                       
15/03/2008

   

  I expect the following data set as a result from the following request : 

   

  SELECT ct.dat,ct.heur,hp.datmesure,hp.heuremesure,hp.t FROM calendar_temp as 
ct

  LEFT OUTER JOIN h_part as hp

  ON ct.dat = hp.datmesure

  AND ct.heur = hp.heuremesure

  WHERE

  hp.poste_idposte = 275

  ORDER BY ct.dat, ct.heur

   

  dat                         heur      datmesure         heuremesure   t

  -----------------------------------------------------------

  15/03/2008         0:00       15/03/2008         0:00                       
8,3

  15/03/2008         3:00       15/03/2008         3:00                       12

  15/03/2008         6:00       15/03/2008         6:00                       15

  15/03/2008         9:00       15/03/2008         9:00                       18

  15/03/2008         12:00     null                        null                 
       null

  15/03/2008         15:00     null                        null                 
       null

   

   

  But unfortunatly all that I get is  this set : 

   

  dat                         heur      datmesure         heuremesure   t

  -----------------------------------------------------------

  15/03/2008         0:00       15/03/2008         0:00                       
8,3

  15/03/2008         3:00       15/03/2008         3:00                       12

  15/03/2008         6:00       15/03/2008         6:00                       15

  15/03/2008         9:00       15/03/2008         9:00                       18

   

   

  Getting mad with it...

   

  Thanks for any help...

   

   

   

Reply via email to