Bug 4906 -- Left join of subselect incorrect
| От | Mathieu Fenniak |
|---|---|
| Тема | Bug 4906 -- Left join of subselect incorrect |
| Дата | |
| Msg-id | 530A4611-C6B9-4E1D-9C72-7B86E8E6F362@fenniak.net обсуждение исходный текст |
| Ответы |
Re: Bug 4906 -- Left join of subselect incorrect
Re: Bug 4906 -- Left join of subselect incorrect |
| Список | pgsql-bugs |
Hi all,
After running the attached setup.sql.gz SQL script on a PostgreSQL
8.4.0 database, the following two queries which should be logically
identical return different results. As far as I can tell from the
query analysis, the LEFT JOIN on query A is happening after
"ee.projectid = pc.projectid" is filtered; therefore the rows where
projectid is NULL are not visible in query A. The issue does not
occur in PostgreSQL 8.3.6.
My apologies for the large test setup; I attempted build up the same
test case, but was unable to reproduce the issue. I had to tear down
my database as much as I could while maintaining the issue.
Query A:
select *
FROM expense ex
JOIN expenseentry ee ON ex.id = ee.expenseid
LEFT JOIN (
SELECT projectclient.projectid, projectclient.clientid,
projectclient.billingpercentage
FROM projectclient
WHERE projectclient.projectid IN (
SELECT project.id
FROM project
WHERE project.clientbillingallocationmethod <> 2)
) pc ON ee.projectid = pc.projectid
Query B:
select *
FROM expense ex
JOIN expenseentry ee ON ex.id = ee.expenseid
LEFT JOIN (
SELECT projectclient.projectid, projectclient.clientid,
projectclient.billingpercentage
FROM projectclient
INNER JOIN project ON (projectclient.projectid = project.id)
WHERE project.clientbillingallocationmethod <> 2
) pc ON ee.projectid = pc.projectid
Вложения
В списке pgsql-bugs по дате отправления: