Reputation: 1225
I have three tables that have data like this:
Table CON_MEMBER
:
CONTAINER_DATA_BO | CONTAINER_NUMBER_BO |
---|---|
PARENT_REF_001 | CHILD_REF_001 |
PARENT_REF_001 | CHILD_REF_002 |
Table CON_DATA
:
HANDLE | CONTAINER_NUMBER |
---|---|
CHILD_REF_001 | CHILD_001 |
CHILD_REF_002 | CHILD_002 |
Table CON_CUSTOM_DATA
:
CONTAINER_DATA_BO | DATA_FIELD | DATA_ATTR |
---|---|---|
CHILD_REF_001 | QTY | 10 |
CHILD_REF_001 | CLASS | CLASS 1 |
CHILD_REF_001 | MAT | MAT 1 |
CHILD_REF_001 | TYPE | BARREL |
CHILD_REF_001 | TRANSPORT | 1 |
CHILD_REF_002 | QTY | 100 |
CHILD_REF_002 | CLASS | CLASS 2 |
CHILD_REF_002 | MAT | MAT 2 |
CHILD_REF_002 | TYPE | DRUM |
Now I have written a query that will get all the child container numbers against the parent container for which the CON_CUSTOM_DATA.TRANSPORT
is not 1
SELECT DISTINCT
cd.CONTAINER_NUMBER
FROM
CON_MEMBER cm1
INNER JOIN
CON_MEMBER cm2 ON cm1.CONTAINER_NUMBER_BO = cm2.CONTAINER_DATA_BO
INNER JOIN
CON_DATA cd ON cd.HANDLE = cm1.CONTAINER_NUMBER_BO
LEFT JOIN
CON_CUSTOM_DATA ccd ON cd.HANDLE = ccd.CONTAINER_DATA_BO
WHERE
cm1.CONTAINER_DATA_BO = 'PARENT_REF_001'
AND ccd.DATA_ATTR <> '1'
But the query returns both the child "CHILD_002" as well as "CHILD_001". What is am expecting from above query is to get the Child Container Number "CHILD_002", Since for this container TRANSPORT is not 1.
Please help me achieve this output.
Thanking you in advance.
Upvotes: 1
Views: 1160
Reputation: 6015
You could try something like this
SELECT DISTINCT cd.CONTAINER_NUMBER
FROM CON_MEMBER cm
JOIN CON_DATA cd ON cm.CONTAINER_NUMBER_BO=cd.HANDLE
WHERE NOT EXISTS (SELECT 1
FROM CON_CUSTOM_DATA ccd
WHERE cd.HANDLE = ccd.CONTAINER_DATA_BO
AND ccd.DATA_FIELD='TRANSPORT'
AND ccd.DATA_ATTR=1);
Upvotes: 1