Hello,
I'm writing a query with a left join to a view, and the server is giving me
a wrong result.
SELECT emp_id,institution from sip_carriere where emp_id = 342 and
institution = 1;
emp_id | institution
--------+-------------
342 | 1
(1 row)
SELECT * from sip_demissionaire where emp_id = 342;
emp_id | demission_date
--------+----------------
(0 rows)
IF I COMBINE THE TWO QUERIES WITH A LEFT JOIN QUERY AND PUT ONLY ONE
CONDITION, IT WOKS JUST FINE :
SELECT distinct c.emp_id,c.institution,d.* from sip_carriere c left join
sip_demissionaire d on d.emp_id = c.emp_id where c.emp_id = 342 ;
emp_id | institution | emp_id | demission_date
--------+-------------+--------+----------------
342 | 1 | |
342 | 63 | |
342 | 85 | |
(3 rows)
SELECT distinct c.emp_id,c.institution,d.* from sip_carriere c left join
sip_demissionaire d on d.emp_id = c.emp_id where c.institution = 1;
emp_id | institution | emp_id | demission_date
--------+-------------+--------+----------------
342 | 1 | |
... | ... | ...| ...
BUT IF I PUT BOTH CONDITIONS
SELECT distinct c.emp_id,c.institution,d.* from sip_carriere c left join
sip_demissionaire d on d.emp_id = c.emp_id where c.emp_id = 342 and
c.institution = 1;
emp_id | institution | emp_id | demission_date
--------+-------------+--------+----------------
(0 rows)
What's the problem ?
I'm sure that the problem is with the view "sip_demissionaire" cause when I
copied its content to a temp table, the query returned a result.
SELECT * into temp foo from sip_demissionaire ;
SELECT distinct c.emp_id,c.institution,d.* from sip_carriere c left join foo
d on d.emp_id = c.emp_id where c.emp_id = 342 and c.institution = 1;
emp_id | institution | emp_id | demission_date
--------+-------------+--------+----------------
342 | 1 | |
(1 row)
Here's the description of the view "sip_demissionaire" in case you need it
CREATE VIEW sip_demissionaire AS
(
SELECT t1.* from
(
SELECT emp_id,max(demission_date) as demission_date
from sip_carriere_dates
where demission_date is not null
group by emp_id
) as t1
left join
(
select emp_id
from sip_carriere_dates
where demission_date is null
) as t2 on t1.emp_id = t2.emp_id
where t2.emp_id is null
);
I know it's a long mail, but I'd appreciate any help
Thx in advance
Pascal