Reputation: 3428
I am working on a SQL join query as follows
SELECT DISTINCT GL2.Number1, GL.DEPARTMENT,GL.CLASS,GL.SUBCLASS,GL.LINE, PR.*
FROM DETAIL A
LEFT JOIN CATEGORIES CAT ON A.WEB_ID=CAT.CATEGORY_ID
LEFT JOIN GROUP_LINES GL ON
A.BRAND=GL.MANUFACTURER
OR A.A1=GL.Number1
OR CAT.A2 = GL.DEPARTMENT
OR CAT.A3= GL.CLASS
OR CAT.A4= GL.SUBCLASS
OR CAT.A5= GL.LINE
LEFT JOIN RULE_GROUPS RG ON GL.GROUP_ID=RG.GROUP_ID
LEFT JOIN RULE_GROUPS RG2 ON RG.RULE_ID=RG2.RULE_ID
LEFT JOIN GROUP_LINES GL2 ON RG2.GROUP_ID=GL2.GROUP_ID
LEFT JOIN PRICING_RULES PR ON RG.RULE_ID=PR.RULE_ID
LEFT JOIN PRICING_ATTRIBUTES PA ON PR.RULE_ID=PA.RULE_ID
WHERE A.INVEN_ID='123456'
Now that I have another table named Exclusions (say Ex) with fields BRAND, Number1, DEPARTMENT, CATEGORY_ID which also the columns in the above query but I would like to check this table and a record should be returned only when the following conditions are all true
Ex.BRAND!=A.BRAND AND
EX.NEMBER1!=A.SEGMENT1 AND
EX.DEPARTMENT!=GL.DEPARTMENT AND
EX.CATEGORY_ID!=A.WEB_ID
may I know a solution to this?
Upvotes: 0
Views: 30
Reputation: 2908
If you want to exclude it if ALL of the columns match:
SELECT DISTINCT GL2.Number1, GL.DEPARTMENT,GL.CLASS,GL.SUBCLASS,GL.LINE, PR.*
FROM DETAIL A
LEFT JOIN CATEGORIES CAT ON A.WEB_ID=CAT.CATEGORY_ID
LEFT JOIN GROUP_LINES GL ON
A.BRAND=GL.MANUFACTURER
OR A.A1=GL.Number1
OR CAT.A2 = GL.DEPARTMENT
OR CAT.A3= GL.CLASS
OR CAT.A4= GL.SUBCLASS
OR CAT.A5= GL.LINE
LEFT JOIN RULE_GROUPS RG ON GL.GROUP_ID=RG.GROUP_ID
LEFT JOIN RULE_GROUPS RG2 ON RG.RULE_ID=RG2.RULE_ID
LEFT JOIN GROUP_LINES GL2 ON RG2.GROUP_ID=GL2.GROUP_ID
LEFT JOIN PRICING_RULES PR ON RG.RULE_ID=PR.RULE_ID
LEFT JOIN PRICING_ATTRIBUTES PA ON PR.RULE_ID=PA.RULE_ID
WHERE A.INVEN_ID='123456'
AND NOT EXISTS
(
SELECT *
FROM
Exclusions Ex
WHERE
Ex.BRAND = A.BRAND AND
EX.NEMBER1 = A.SEGMENT1 AND
EX.DEPARTMENT = GL.DEPARTMENT AND
EX.CATEGORY_ID = A.WEB_ID
);
Or if you want to exclude it if ANY of the columns match
SELECT DISTINCT GL2.Number1, GL.DEPARTMENT,GL.CLASS,GL.SUBCLASS,GL.LINE, PR.*
FROM DETAIL A
LEFT JOIN CATEGORIES CAT ON A.WEB_ID=CAT.CATEGORY_ID
LEFT JOIN GROUP_LINES GL ON
A.BRAND=GL.MANUFACTURER
OR A.A1=GL.Number1
OR CAT.A2 = GL.DEPARTMENT
OR CAT.A3= GL.CLASS
OR CAT.A4= GL.SUBCLASS
OR CAT.A5= GL.LINE
LEFT JOIN RULE_GROUPS RG ON GL.GROUP_ID=RG.GROUP_ID
LEFT JOIN RULE_GROUPS RG2 ON RG.RULE_ID=RG2.RULE_ID
LEFT JOIN GROUP_LINES GL2 ON RG2.GROUP_ID=GL2.GROUP_ID
LEFT JOIN PRICING_RULES PR ON RG.RULE_ID=PR.RULE_ID
LEFT JOIN PRICING_ATTRIBUTES PA ON PR.RULE_ID=PA.RULE_ID
WHERE A.INVEN_ID='123456'
AND NOT EXISTS
(
SELECT *
FROM
Exclusions Ex
WHERE
Ex.BRAND = A.BRAND OR
EX.NEMBER1 = A.SEGMENT1 OR
EX.DEPARTMENT = GL.DEPARTMENT OR
EX.CATEGORY_ID = A.WEB_ID
);
Upvotes: 2