Outer join problem

From: <jain-neeraj_at_lycos.com>
Date: 18 Jun 2004 09:35:59 -0700
Message-ID: <30b5aacb.0406180835.55c88998_at_posting.google.com>



Hi,

We have a problem in our mobile calls billing software. To solve it, I need an outer join in a complicated query. Following are the simplified tables with sample data:

create table CONTROL1 (CTRL_NO number(2)); insert into CONTROL1 values (10);

create table CONTROL2 (CTRL_NO number(2)); -- does not have any data

create table CODE (CODE number(2), CD_TYP number(2)); insert into CODE values (20, 21);

create table PAYER (PERIOD number(2), CUST number(2), BA number(2), CTRL_NO number(2));

insert into PAYER values (1,1,1,10);
insert into PAYER values (1,1,2,10);
insert into PAYER values (1,1,3,10);

create table CHARGE (PERIOD number(2), CUST number(2), BA number(2), CTRL_NO number(2), SEQ1 number(2), SEQ2 number(2), CODE number(2), RECEIVER number(2));
insert into CHARGE values (1,1,1,10,4,5,20,99); insert into CHARGE values (1,1,2,10,4,6,20,90);

create table OUTCHARGE (PERIOD number(2), CUST number(2), SEQ1 number(2), SEQ2 number(2));
insert into OUTCHARGE values (1,1,4,5);
insert into OUTCHARGE values (1,1,4,6);

QUERY is:

        SELECT PAYER.PERIOD, PAYER.CUST, PAYER.BA, PAYER.CTRL_NO, CHARGE.CODE, CODE.CD_TYP, CHARGE.RECEIVER

	FROM PAYER, CHARGE, OUTCHARGE, CODE, 
		 (select * from CONTROL1
		union select * from CONTROL2) TMP_CONTROL
	WHERE PAYER.CTRL_NO=TMP_CONTROL.CTRL_NO 
	AND CHARGE.PERIOD(+)=PAYER.PERIOD
	AND CHARGE.CUST(+)=PAYER.CUST
	AND CHARGE.BA(+)=PAYER.BA 
	AND CHARGE.CTRL_NO(+)=PAYER.CTRL_NO 
	AND CHARGE.CODE=CODE.CODE
	AND OUTCHARGE.PERIOD=CHARGE.PERIOD  
	AND OUTCHARGE.CUST=CHARGE.CUST
	AND OUTCHARGE.SEQ1=CHARGE.SEQ1 
	AND OUTCHARGE.SEQ2=CHARGE.SEQ2;

Output should be (3 rows):
(1,1,1,10,20,21,99)
(1,1,2,10,20,21,90)

(1,1,3,10,null,null,null)

When I use the above query, I get only the first 2 rows, not the third. What mistake am I doing?

Thanks in advance. Received on Fri Jun 18 2004 - 18:35:59 CEST

Original text of this message