Outer join

  • From: Wolfgang Breitling <breitliw@xxxxxxxxxxxxx>
  • To: oracle-l@xxxxxxxxxxxxx
  • Date: Sun, 09 Nov 2008 18:20:52 -0700

Can someone show me the errors of my way, please.

I have the following two tables:

SQL> desc foo_bar
 Name              Null?    Type
 ----------------- -------- ------------
 COL_01            NOT NULL VARCHAR2(5)
 COL_02            NOT NULL VARCHAR2(10)
 COL_03            NOT NULL VARCHAR2(10)
 COL_04            NOT NULL VARCHAR2(10)
 COL_05            NOT NULL VARCHAR2(8)
 COL_06            NOT NULL VARCHAR2(6)
 COL_07            NOT NULL VARCHAR2(5)
 COL_08            NOT NULL VARCHAR2(5)
 COL_09            NOT NULL VARCHAR2(10)
 COL_10            NOT NULL VARCHAR2(15)
 COL_11            NOT NULL VARCHAR2(10)
 COL_12            NOT NULL VARCHAR2(4)
 COL_13            NOT NULL VARCHAR2(3)
 COL_14            NOT NULL VARCHAR2(3)
 FY                NOT NULL NUMBER(38)
 PD                NOT NULL NUMBER(38)
 COL_15            NOT NULL VARCHAR2(3)
 AMOUNT_1          NOT NULL NUMBER(26,3)
 AMOUNT_2          NOT NULL NUMBER(26,3)
 AMOUNT_3          NOT NULL NUMBER(26,3)

and

SQL> desc foo_tmp
 Name              Null?    Type
 ----------------- -------- ------------
 COL_01            NOT NULL VARCHAR2(5)
 COL_02            NOT NULL VARCHAR2(10)
 COL_03            NOT NULL VARCHAR2(10)
 COL_04            NOT NULL VARCHAR2(10)
 COL_05            NOT NULL VARCHAR2(8)
 COL_06            NOT NULL VARCHAR2(6)
 COL_07            NOT NULL VARCHAR2(5)
 COL_08            NOT NULL VARCHAR2(5)
 COL_09            NOT NULL VARCHAR2(10)
 COL_10            NOT NULL VARCHAR2(15)
 COL_11            NOT NULL VARCHAR2(10)
 COL_12            NOT NULL VARCHAR2(4)
 COL_13            NOT NULL VARCHAR2(3)
 COL_14            NOT NULL VARCHAR2(3)
 FY                NOT NULL NUMBER(38)
 PD                NOT NULL NUMBER(38)
 COL_15            NOT NULL VARCHAR2(3)

with the following contents

foo_bar:
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c1 c13 c14 c15 pd fy amt1 amt2 amt3 ----- ------ ------ ---- ----- --- -- --- -- --- -------- -- --- --- --- ----- --- ----------- ----------- ----------- DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 3 -1,384.62 -1,384.62 -1,384.62 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 3 -1,384.62 -2,041.55 -1,384.62 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 3 -2,041.55 0.00 0.00 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 1 -5,204.55 -5,204.55 -5,204.55 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 2 -10,489.72 -10,489.72 -10,489.72 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 1 -5,204.55 -7,663.18 -5,204.55 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 2 -10,489.72 -15,445.06 -10,489.72 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 1 -7,663.18 0.00 0.00 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 2 -15,445.06 0.00 0.00

foo_tmp:
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c1 c13 c14 c15 pd fy ----- ------ ------ ---- ----- --- -- --- -- --- -------- -- --- --- --- ----- --- DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 4

the content of foo_tmp is designed to have pd values of 1 to 4 for every combination of col_01 to col_15 and fy

I then build the outer join
SELECT B.COL_01, B.COL_02, B.COL_03, B.COL_04, B.COL_05, B.COL_06, B.COL_07, B.COL_08 , B.COL_09, B.COL_10, B.COL_11, B.COL_12, B.COL_13, B.COL_14, B.COL_15, B.PD, B.FY
, A.AMOUNT_1, A.AMOUNT_2, A.AMOUNT_3
FROM FOO_BAR A
, FOO_TMP B
WHERE A.COL_01(+) = B.COL_01
  AND A.COL_02(+) = B.COL_02
  AND A.COL_03(+) = B.COL_03
  AND A.COL_04(+) = B.COL_04
  AND A.COL_05(+) = B.COL_05
  AND A.COL_06(+) = B.COL_06
  AND A.COL_07(+) = B.COL_07
  AND A.COL_08(+) = B.COL_08
  AND A.COL_09(+) = B.COL_09
  AND A.COL_10(+) = B.COL_10
  AND A.COL_11(+) = B.COL_11
  AND A.COL_12(+) = B.COL_12
  AND A.COL_13(+) = B.COL_13
  AND A.COL_14(+) = B.COL_14
  AND A.COL_15(+) = B.COL_15
  AND A.FY(+)     = B.FY
  AND A.PD(+)     = B.PD

and get this result:
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c1 c13 c14 c15 pd fy amt1 amt2 amt3 ----- ------ ------ ---- ----- --- -- --- -- --- -------- -- --- --- --- ----- --- ----------- ----------- ----------- DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 3 -1,384.62 -1,384.62 -1,384.62 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR EUR 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 3 -1,384.62 -2,041.55 -1,384.62 DEF03 112233 556677 7777 ABC01 99 AEIOU B EUR USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 1 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 2 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 3 -2,041.55 0.00 0.00 DEF03 112233 556677 7777 ABC01 99 AEIOU B USD USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 1 -5,204.55 -5,204.55 -5,204.55 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 1 -5,204.55 -5,204.55 -5,204.55 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 2 -10,489.72 -10,489.72 -10,489.72 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 2 -10,489.72 -10,489.72 -10,489.72 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR EUR 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 1 -5,204.55 -7,663.18 -5,204.55 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 1 -5,204.55 -7,663.18 -5,204.55 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 2 -10,489.72 -15,445.06 -10,489.72 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 2 -10,489.72 -15,445.06 -10,489.72 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U EUR USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 1 -7,663.18 0.00 0.00 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 1 -7,663.18 0.00 0.00 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 2 -15,445.06 0.00 0.00 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 2 -15,445.06 0.00 0.00 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 3 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 4 DEF03 112233 556677 7777 ABC01 99 AEIOU U USD USD 2008 4

What am I doing wrong? Why do I get duplicates if foo_bar has rows for different pd's with the rest of the columns the same.

PS, columns that don't seem to have a value have a blank.


Regards

Wolfgang Breitling
Centrex Consulting Corporation
http://www.centrexcc.com
--
//www.freelists.org/webpage/oracle-l


Other related posts: