converting Informix outer to Postgres
Hi all,
I have been working on this Informix SQL query which has an outer join.
I have attached Informix query and my "supposedly" solution to this query
but I cannot get the same count. I appreciate for any help.
Thanks.
--Informix query
select count(u.id)
from user u, invention i, inv_contracts ic, inv_milestones im1, milestonedef mdef1,
OUTER inv_milestones im2,
milestonedef mdef2
where u.id = i.user_id and
ic.inv_id = i.id and
ic.contract_id = mdef1.contract_id and
im1.inv_id = i.id and
mdef1.id = im1.milestone_id and
im1.datesent BETWEEN '2005-05-05' AND '2005-05-10' and
ic.contract_id = mdef2.contract_id and
im2.inv_id = i.id and
mdef2.id = im2.milestone_id and
im1.datereceived IS NULL
--Postges query
select count(u.id)
from dbuser u, inv_contracts ic, inv_milestones im1, milestonedef mdef1,
--OUTER inv_milestones im2,
milestonedef mdef2 LEFT OUTER JOIN inv_milestones im2 ON mdef2.id = im2.milestone_id
LEFT OUTER JOIN invention i ON im2.inv_id = i.id
where u.id = i.user_id and
ic.inv_id = i.id and
ic.contract_id = mdef1.contract_id and
im1.inv_id = i.id and
mdef1.id = im1.milestone_id and
im1.datesent BETWEEN '2005-05-05' AND '2005-05-10' and
ic.contract_id = mdef2.contract_id and
--im2.inv_id = i.id and
--mdef2.id = im2.milestone_id and
im1.datereceived IS NULL
-------------------------------------------------
This mail sent through IMP: www.resolution.com
On Tue, Nov 07, 2006 at 06:35:05PM -0500, gurkan@resolution.com wrote:
Hi all,
I have been working on this Informix SQL query which has an outer join.
I have attached Informix query and my "supposedly" solution to this query
but I cannot get the same count. I appreciate for any help.
Thanks.
I don't know what the Informix outer join is, but is it like the SQL
FULL OUTER JOIN? Have you tried using that?
Have a nice day,
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/
Show quoted text
From each according to his ability. To each according to his ability to litigate.
Hi.
From some documentation:
In INFORMIX SQL, outer tables are defined in the FROM clause with the OUTER keyword :
SELECT ... FROM a, OUTER(b)
WHERE a.key = b.akey
SELECT ... FROM a, OUTER(b,OUTER(c))
WHERE a.key = b.akey
AND b.key1 = c.bkey1
AND b.key2 = c.bkey2
PostgreSQL 7.1 supports the ANSI outer join syntax :
SELECT ... FROM cust LEFT OUTER JOIN order
ON cust.key = order.custno
SELECT ...
FROM cust LEFT OUTER JOIN order
LEFT OUTER JOIN item
ON order.key = item.ordno
ON cust.key = order.custno
WHERE order.cdate > current date
Any help?
Henk
Show quoted text
-----Oorspronkelijk bericht-----
Van: pgsql-general-owner@postgresql.org
[mailto:pgsql-general-owner@postgresql.org]Namens Martijn van Oosterhout
Verzonden: woensdag 8 november 2006 11:42
Aan: gurkan@resolution.com
CC: pgsql-general@postgresql.org
Onderwerp: Re: [GENERAL] converting Informix outer to PostgresOn Tue, Nov 07, 2006 at 06:35:05PM -0500, gurkan@resolution.com wrote:
Hi all,
I have been working on this Informix SQL query which has an outer join.
I have attached Informix query and my "supposedly" solution to this query
but I cannot get the same count. I appreciate for any help.
Thanks.I don't know what the Informix outer join is, but is it like the SQL
FULL OUTER JOIN? Have you tried using that?Have a nice day,
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/From each according to his ability. To each according to his ability to litigate.
Perhaps a more recent version of postgres (8.1 or mayber even look at 8.2 ...); lots of improvements since 7.1, IIRC in the area of joins specifically, but I don't know the answer to your question specifically.
HTH,
Greg Williamson (a [mostly] former Informix user, but not, alas, with such queries)
DBA
GlobeXplorer LLC
-----Original Message-----
From: pgsql-general-owner@postgresql.org on behalf of H.J. Sanders
Sent: Wed 11/8/2006 4:27 AM
To: Martijn van Oosterhout; pgsql-general@postgresql.org
Cc:
Subject: Re: [GENERAL] converting Informix outer to Postgres
Hi.
From some documentation:
In INFORMIX SQL, outer tables are defined in the FROM clause with the OUTER keyword :
SELECT ... FROM a, OUTER(b)
WHERE a.key = b.akey
SELECT ... FROM a, OUTER(b,OUTER(c))
WHERE a.key = b.akey
AND b.key1 = c.bkey1
AND b.key2 = c.bkey2
PostgreSQL 7.1 supports the ANSI outer join syntax :
SELECT ... FROM cust LEFT OUTER JOIN order
ON cust.key = order.custno
SELECT ...
FROM cust LEFT OUTER JOIN order
LEFT OUTER JOIN item
ON order.key = item.ordno
ON cust.key = order.custno
WHERE order.cdate > current date
Any help?
Henk
-----Oorspronkelijk bericht-----
Van: pgsql-general-owner@postgresql.org
[mailto:pgsql-general-owner@postgresql.org]Namens Martijn van Oosterhout
Verzonden: woensdag 8 november 2006 11:42
Aan: gurkan@resolution.com
CC: pgsql-general@postgresql.org
Onderwerp: Re: [GENERAL] converting Informix outer to PostgresOn Tue, Nov 07, 2006 at 06:35:05PM -0500, gurkan@resolution.com wrote:
Hi all,
I have been working on this Informix SQL query which has an outer join.
I have attached Informix query and my "supposedly" solution to this query
but I cannot get the same count. I appreciate for any help.
Thanks.I don't know what the Informix outer join is, but is it like the SQL
FULL OUTER JOIN? Have you tried using that?Have a nice day,
--
Martijn van Oosterhout <kleptog@svana.org> http://svana.org/kleptog/From each according to his ability. To each according to his ability to litigate.
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings
-------------------------------------------------------
Click link below if it is SPAM gsw@globexplorer.com
"https://mailscanner.globexplorer.com/dspam/dspam.cgi?signatureID=4551ca60161213366512726&user=gsw@globexplorer.com&retrain=spam&template=history&history_page=1"
!DSPAM:4551ca60161213366512726!
-------------------------------------------------------
I am not familiar with Informix but:
- is OUTER() a LEFT or FULL outer join?
- it is important where you put your join condition in Postgres wrt NULL
insertions of OUTER joins
E.g. Tables A(k,a) with (k1,a1), (k2, a2) records and table B(k,b) with
(k1, b1) will result in:
A LEFT OUTER JOIN B ON a.k = b.k
AxB
k1,a1,k1,b1
k2,a2,NULL,NULL
and
A LEFT OUTER JOIN B ON a.k = b.k WHERE a.k = b.k
AxB
k1,a1,k1,b1
and
A LEFT OUTER JOIN B WHERE a.k = b.k
AxB
k1,a1,k1,b1
Since you moved your join condition from the WHERE to the ON part of the
query, you might run into this subtle difference in joining (been there,
done that ;-)).
Regards,
Harco
gurkan@resolution.com wrote:
Show quoted text
Hi all,
I have been working on this Informix SQL query which has an outer join.
I have attached Informix query and my "supposedly" solution to this query
but I cannot get the same count. I appreciate for any help.
Thanks.--Informix query
select count(u.id)
from user u, invention i, inv_contracts ic, inv_milestones im1, milestonedef mdef1,
OUTER inv_milestones im2,
milestonedef mdef2
where u.id = i.user_id and
ic.inv_id = i.id and
ic.contract_id = mdef1.contract_id and
im1.inv_id = i.id and
mdef1.id = im1.milestone_id and
im1.datesent BETWEEN '2005-05-05' AND '2005-05-10' and
ic.contract_id = mdef2.contract_id and
im2.inv_id = i.id and
mdef2.id = im2.milestone_id and
im1.datereceived IS NULL--Postges query
select count(u.id)
from dbuser u, inv_contracts ic, inv_milestones im1, milestonedef mdef1,
--OUTER inv_milestones im2,
milestonedef mdef2 LEFT OUTER JOIN inv_milestones im2 ON mdef2.id = im2.milestone_id
LEFT OUTER JOIN invention i ON im2.inv_id = i.id
where u.id = i.user_id and
ic.inv_id = i.id and
ic.contract_id = mdef1.contract_id and
im1.inv_id = i.id and
mdef1.id = im1.milestone_id and
im1.datesent BETWEEN '2005-05-05' AND '2005-05-10' and
ic.contract_id = mdef2.contract_id and
--im2.inv_id = i.id and
--mdef2.id = im2.milestone_id and
im1.datereceived IS NULL-------------------------------------------------
This mail sent through IMP: www.resolution.com---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly