2015-11-20 4 views
0

У меня есть 3 таблицы, соединенные вместе, и таблица NSR_Details, которая содержит элементы, которые должны быть исключены в выборе трех таблиц.SQL - Невозможно исключить данные, используя NOT EXIST

Я могу исключить информацию, указанную с NSR_details, но когда я ищу с LIKE, она по-прежнему возвращает исключенные данные. Вот мой запрос:.

SELECT b.MainID 
    ,a.Description 
    ,b.ItemID 
    ,b.Size 
    ,c.Current_SRP 
    ,b.Barcode 
FROM IMF_SKU AS b 
LEFT JOIN IMF_Main AS c ON c.MainID = b.MainID 
LEFT JOIN IMF_Extensions AS a ON a.MainID = b.MainID 
WHERE (a.Description LIKE 'BBB') 
    OR (b.Barcode LIKE 'BBB') 
    AND NOT EXISTS (
     SELECT * 
     FROM INV_SKU_NSR_DetailsRepo 
     ) 

Так в NSR_Details у меня есть AAA и BBB данные, чтобы исключить, (остальные имеют AAA и BBB детали, а также CCC, DDD, ЕЕЕ и т.д. не в NSR_details я просто хочу, чтобы исключить AAA и BBB, когда я заполнить условие условия WHERE. Я использую SSMS как мой СУБД, если кто-нибудь спросит.

+4

Необязательный суб-запрос NOT EXISTS требует ссылки на основной запрос в предложении WHERE. – jarlh

+1

Имея условия правой стороны таблицы LEFT JOIN в предложении WHERE, делает LEFT JOIN выполненным как обычный INNER JOIN. Перейдите в положение ON, чтобы получить истинное поведение левого соединения. – jarlh

+0

http://www.geeksengine.com/database/subquery/exists.php – OldProgrammer

ответ

1

Основываясь на комментарии

NSR_DetailsRepo имеет поле, которое имеет те же данные, Главная, SKU и расширения. Я просто хочу выбрать детали из m main, sku и , которые не находятся в таблице NSR_details.

Я считаю, что вы хотите, это, если поля зависят

SELECT b.MainID 
    ,a.Description 
    ,b.ItemID 
    ,b.Size 
    ,c.Current_SRP 
    ,b.Barcode 
FROM IMF_SKU AS b 
LEFT JOIN IMF_Main AS c ON c.MainID = b.MainID 
LEFT JOIN IMF_Extensions AS a ON a.MainID = b.MainID 
LEFT JOIN INV_SKU_NSR_DetailsRepo nsr on 
     nsr.Description = a.Description and 
     nsr.Barcode = b.Barcode 
WHERE ((a.Description LIKE 'BBB') 
    OR (b.Barcode LIKE 'BBB')) 
    AND nsr.Description is null 

или это, если поля являются независимыми

SELECT b.MainID 
    ,a.Description 
    ,b.ItemID 
    ,b.Size 
    ,c.Current_SRP 
    ,b.Barcode 
FROM IMF_SKU AS b 
LEFT JOIN IMF_Main AS c ON c.MainID = b.MainID 
LEFT JOIN IMF_Extensions AS a ON a.MainID = b.MainID 
LEFT JOIN INV_SKU_NSR_DetailsRepo nsr on 
     nsr.Description = a.Description or 
     nsr.Barcode = b.Barcode 
WHERE ((a.Description LIKE 'BBB') 
    OR (b.Barcode LIKE 'BBB')) 
    AND nsr.Description is null 

Это работает, потому что LEFT JOIN с проверкой на присоединяемой таблицы являющееся нулевым, совпадает с конструкцией NOT IN.

Смежные вопросы