I'm trying to convert some Oracle SQL code to regular SQL and am having trouble with the numerous variables in the SELECT statement, tables in the FROM statement, and (+) WHERE statements.
I have looked through similar posts but all provide simple examples with just 2 variables, 2 tables, and 1 (+) WHERE statement. I'm not sure how to apply what I'm seeing from the other forum posts to multiple variables, tables, and (+) WHERE statements.
SELECT
a.ID,
c.var1,
d.var2
FROM a, b, c, d, x, y
WHERE a.ID(+) = b.ID
AND c.var1(+) = b.var1
AND x.id(+) = y.id;
I tried to convert all the (+) WHERE statements to LEFT JOINs as shown below. I did 3 LEFT JOINS, one for each (+) WHERE statement:
SELECT
a.ID,
c.var1,
d.var2
FROM a, b, c, d, x, y
WHERE b.ID in
(SELECT b.ID
FROM b
LEFT JOIN a
ON a.ID = b.ID)
The query:
SELECT a.ID,
c.var1,
d.var2
FROM a, b, c, d, x, y
can be rewritten using ANSI-join syntax as:
SELECT a.ID,
c.var1,
d.var2
FROM a
CROSS JOIN b
CROSS JOIN c
CROSS JOIN d
CROSS JOIN x
CROSS JOIN y
If you add in the WHERE
clause then WHERE c.var1(+) = b.var1
converts the CROSS JOIN
to a LEFT OUTER JOIN
from b
to c
. Similarly for the other join conditions.
Which gives you:
SELECT a.ID,
c.var1,
d.var2
FROM b
LEFT OUTER JOIN a ON a.ID = b.ID
LEFT OUTER JOIN c ON c.var1 = b.var1
CROSS JOIN d
CROSS JOIN y
LEFT OUTER JOIN x ON x.id = y.id;