2016-01-25 2 views
0

я работаю на 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) с полями БРЕНД, Number1 , Департамент, CATEGORY_ID который также столбцы в приведенном выше запросе, но я хотел бы проверить эту таблицу и запись должна быть возвращена только тогда, когда выполняются следующие условия все верно

Ex.BRAND!=A.BRAND AND 
EX.NEMBER1!=A.SEGMENT1 AND 
EX.DEPARTMENT!=GL.DEPARTMENT AND 
EX.CATEGORY_ID!=A.WEB_ID 

может я знаю, что решение этой проблемы?

ответ

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 
); 
Смежные вопросы