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 по дате отправления: