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,2 0,99);
insert into CHARGE values (1,1,2,10,4,6,2 0,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=T MP_CONTROL.CTRL _NO
AND CHARGE.PERIOD(+ )=PAYER.PERIOD
AND CHARGE.CUST(+)= PAYER.CUST
AND CHARGE.BA(+)=PA YER.BA
AND CHARGE.CTRL_NO( +)=PAYER.CTRL_N O
AND CHARGE.CODE=COD E.CODE
AND OUTCHARGE.PERIO D=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.
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,2 0,99);
insert into CHARGE values (1,1,2,10,4,6,2 0,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=T MP_CONTROL.CTRL _NO
AND CHARGE.PERIOD(+ )=PAYER.PERIOD
AND CHARGE.CUST(+)= PAYER.CUST
AND CHARGE.BA(+)=PA YER.BA
AND CHARGE.CTRL_NO( +)=PAYER.CTRL_N O
AND CHARGE.CODE=COD E.CODE
AND OUTCHARGE.PERIO D=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.
Comment