Re: join question - three tables, two with foreign keys to the first - Mailing list pgsql-sql

From Dmitri Colebatch
Subject Re: join question - three tables, two with foreign keys to the first
Date
Msg-id 08da01c212e7$37bf1450$fe00a8c0@hobbes
Whole thread Raw
In response to join question - three tables, two with foreign keys to the first  ("Dmitri Colebatch" <dim@bigpond.net.au>)
Responses Re: join question - three tables, two with foreign keys to
List pgsql-sql
maybe just to qualify, I get this:

select emp.name, lv.from_date, lv.to_date, pay.amount
from employee as emp
left join employee_leave as lv on emp.id = lv.employee_id
left join employee_pay as pay on emp.id = pay.employee_id
where emp.id = 1;
name | from_date  |  to_date   | amount
------+------------+------------+--------dim  | 2002-10-05 | 2002-05-14 |    100dim  | 2002-10-05 | 2002-05-14 |
100dim | 2002-10-06 | 2002-06-14 |    100dim  | 2002-10-06 | 2002-06-14 |    100
 
(4 rows)

but would expect the results to be
name | from_date  |  to_date   | amount
------+------------+------------+--------dim  | 2002-10-05 | 2002-05-14 |   (null)dim  | 2002-10-05 | 2002-05-14 |
(null)dim |       (null)      |      (null)        |    100dim  |       (null)      |      (null)        |    100
 
(4 rows)

am I missing something?

ta again
dim

----- Original Message -----
From: "Dmitri Colebatch" <dim@bigpond.net.au>
To: <pgsql-sql@postgresql.org>
Sent: Friday, June 14, 2002 12:13 AM
Subject: [SQL] join question - three tables, two with foreign keys to the
first


> hey all,
>
> here's my situation.  three tables:
>
> create table employee (id integer primary key, name varchar(32));
> create table employee_leave (id integer primary key, employee_id integer,
> from_date date, to_date date, constraint emp_leave_fk foreign key
> (employee_id) references employee (id));
> create table employee_pay (id integer primary key, employee_id integer,
> amount integer, constraint emp_pay_fk foreign key (employee_id) references
> employee (id));
>
> and some sample data:
>
> insert into employee (id, name) values (1, 'dim');
> insert into employee_leave (id, employee_id, from_date, to_date) values
(2,
> 1, '10-05-2002', '14-05-2002');
> insert into employee_leave (id, employee_id, from_date, to_date) values
(1,
> 1, '10-06-2002', '14-06-2002');
> insert into employee_pay(id, employee_id, amount) values (1, 1, 100);
> insert into employee_pay(id, employee_id, amount) values (2, 1, 100);
>
> and I want to retrieve the information for an employee (all pay, and all
> leave) in one query....   here's what I've got
>
> select emp.name, lv.from_date, lv.to_date, pay.amount
> from employee as emp
> left outer join employee_leave as lv on emp.id = lv.employee_id
> left outer join employee_pay as pay on emp.id = pay.employee_id
> where emp.id = 1
>
> problem is that I dont get the null values I expect.... I want to be able
to
> iterate through the resultset and determine if the record is from the
leave
> table or pay table - but because I dont get null results, I cant....
>
> any pointers/suggestions would be welcome.
>
> cheers
> dim
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>



pgsql-sql by date:

Previous
From: "Dmitri Colebatch"
Date:
Subject: join question - three tables, two with foreign keys to the first
Next
From: Tom Lane
Date:
Subject: Re: Rule problem