我正在进行SQL连接查询,如下所示
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'
现在我有另一个名为Exclusions(表示Ex)的表,其中包含字段BRAND,Number1,DEPARTMENT,CATEGORY_ID以及上述查询中的列但我想检查此表并且只有在以下情况下才会返回记录条件都是真的
Ex.BRAND!=A.BRAND AND
EX.NEMBER1!=A.SEGMENT1 AND
EX.DEPARTMENT!=GL.DEPARTMENT AND
EX.CATEGORY_ID!=A.WEB_ID
我可以知道解决方法吗?
答案 0 :(得分:2)
如果要在所有列匹配时排除它:
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
);
或者,如果您想要在任何列匹配
时将其排除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
);