October 10, 2006, 09:35 AM
Tim Schraepen"WHERE NOT EXISTS" Oracle to WebFocus
Does anyone know of a way to simulate or rather translate the "WHERE NOT EXISTS" statement of Oracle into WebFocus?
Where not exists is used when you need to find missing links between two tables.
e.g. Department has a "Deptno" field (primary key) and Employee also has a "Deptno" field (foreign key)
You'd go like
SELECT count(*)
from employee e
where not exists (
select '1'
from department d
where d.deptno = e.deptno)
And get the amount of employees without a department.
I've tried using "MATCH" with AFTER MATCH OLD-NOR-NEW and NEW-NOT-OLD, but when I use COUNT equ_equnr it still gives me an incorrect result.
Code:
DEFINE FILE POPLAN
-* To exclude the possibility that WebFocus is missing joins with "null" fields.
EQUNR/A18 = IF MPOS_EQUNR = ' ' THEN '0'
ELSE MPOS_EQUNR;
END
-* Equipment
MATCH FILE EQUIPMNT
PRINT
EQU_EQART
EQU_TPLNR
EQU_EQTYP
BY EQU_EQUNR
RUN
-* Preventive Maintenance Plan
FILE POPLAN
PRINT
*
BY EQUNR
AFTER MATCH HOLD AS 'EQU' OLD-NOR-NEW
END
-* Equipments without POPlan
TABLE FILE EQU
COUNT EQU_EQUNR
END
As usual any help is greatly appreciated.
Greets, Tim.
October 10, 2006, 09:54 AM
KameshHope this is what you are looking for,
TABLE FILE DEPARTMENT
PRINT DST.DEPTNO
ON TABLE HOLD AS DEPTDAT
END
-RUN
TABLE FILE EMPLOYEE
PRINT EMPNO
WHERE NOT DEPTNO IN FILE DEPTDAT
END
-RUN
-EXIT
October 10, 2006, 10:03 AM
susannahquote:
DEFINE FILE POPLAN
-* To exclude the possibility that WebFocus is missing joins with "null" fields.
EQUNR/A18 = IF MPOS_EQUNR = ' ' THEN '0'
ELSE MPOS_EQUNR;
END
EQUNR/A18 MISSING ON = IF MPOS_EQUNR EQ ' ' THEN MISSING ELSE MPOS_EQUNR;
October 10, 2006, 10:08 AM
LeahI use ON TABLE SET ALL ON and print the field, hold the data and then check for the field being blank or zeros. We are DB2.
October 10, 2006, 11:56 AM
JeevaCheck your BY field formats to see if they are the same. In order to use MATCH command correctly BY field formats should be equal.
Jeeva
October 11, 2006, 03:55 AM
Tim Schraepenquote:
Originally posted by Leah:
I use ON TABLE SET ALL ON and print the field, hold the data and then check for the field being blank or zeros. We are DB2.
Thanks everyone for your replies!
Here's the final code I used:
JOIN EQU_EQUNR IN EQUIPMNT
TO ALL MPOS_EQUNR IN POPLAN
AS J1
END
DEFINE FILE EQUIPMNT
EQUNR/A18 MISSING ON = IF MPOS_EQUNR EQ ' ' THEN MISSING ELSE MPOS_EQUNR;
END
TABLE FILE EQUIPMNT
COUNT EQU_EQUNR
WHERE EQUNR IS MISSING;
ON TABLE SET ALL ON
END
It was the piece of code, Leah suggested that got it working, so thanks a bunch Leah!
October 11, 2006, 09:12 AM
LeahYou're welcome Tim, I may try your solution sometime as well.
Have a great day all.