Исключение результатов из набора результатов - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть запрос, где у меня есть NOT IN или NOT EXISTS, на самом деле не имеет значения, оба варианта возможны

SELECT art.aid_artnr
FROM ART ,EAN13
WHERE ean13.AID_MAND(+) = ART.AId_Mand
AND ean13.AID_ARTNR(+) = ART.AId_ArtNr
AND ean13.AID_VAR(+) = ART.AId_Var
AND EXISTS (
        SELECT 1 
        FROM TEP
        WHERE ART.AId_Mand = TEP.MId_AId_Mand
        AND ART.AId_ArtNr = TEP.MId_AId_ArtNr
        AND ART.AId_Var = TEP.MId_AId_Var
        AND TEP.Mngs_Mng > 0 
        AND TEP.SobeKz = 0 
)
AND art.AID_ARTNR NOT IN (
        SELECT AID_ARTNR
        FROM KORT
)
AND ART.LogimatKz = 0 
AND ART.TeBoKz = 0 
AND ART.GardKz = 0 
AND ART.DivArt = 0 
AND ART.BeschaffArt = 0 

Моя проблема в том, что в таблице KORT можно иметь 1 или 2 записи для каждой art.AID_ARTNR или вообще не вводить запись.

2 различных типа записей возможны в KORT, TYPE A и TYPE B

если у меня теперь есть запись для TYPE A для art.AID_ARTNR, оператор не должен показывать результат, который работает.

теперь я как-то должен также исключить, если TYPE A AND B находятся в таблице KORT, это также не разрешено отображать, что также работает, потому что есть запись для art.AID_ARTNR в KORT

пока все хорошо

НО

результаты должны показать, ЕСЛИ в KORT есть запись от TYPE B, но не от TYPE A, я не могу понять, как это сделать правильно, может быть, это глупо легко, и я просто думаю сложный ..

Может быть, кто-то может мне помочь

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

мне не понятно, почему я не могу просто написать комментарий к предыдущему ответу от Used_By_Already.В любом случае, @Bertl - TeamRasi, я думаю, что вы уже решили проблему самостоятельно в своем последнем комментарии:

select * from kort where kort.kompos_feldid IN (SELECT feldid FROM fes WHERE fes.LAGID IN (SELECT PRM3_VALUE FROM PARM WHERE parm.PRM3_ID = 'VerRaumLagId'))

просто добавьте дополнительное:

or kort.kompos_fieldid is null

должно работать, не так ли?Я думаю, что вам следует перефразировать проблему или поднять новый вопрос, так как по крайней мере я немного запутался в вашем вопросе, поскольку в своем вопросе вы не упомянули об этом столбце «KOMPOS_FIELDID» в таблице KORT, просто в своем последнем комментарии.Мне кажется, проблема в том, чтобы получить правильный список AID_ARNTR из таблицы KORT, так что, может быть, просто перефразировать вопрос к этой конкретной проблеме?

0 голосов
/ 13 сентября 2018

Чтобы показать, ЕСЛИ есть запись из ТИПА B, но не из ТИПА AI, подумайте, что вы можете что-то наподобие дополнительного подзапроса, показанного ниже, используя сумму выражений регистра в предложении has.

SELECT
    art.aid_artnr
FROM ART
LEFT JOIN EAN13 ON ean13.AID_MAND = ART.AId_Mand
    AND ean13.AID_ARTNR = ART.AId_ArtNr
    AND ean13.AID_VAR = ART.AId_Var
WHERE EXISTS (
    SELECT
        1
    FROM TEP
    WHERE ART.AId_Mand = TEP.MId_AId_Mand
    AND ART.AId_ArtNr = TEP.MId_AId_ArtNr
    AND ART.AId_Var = TEP.MId_AId_Var
    AND TEP.Mngs_Mng > 0
    AND TEP.SobeKz = 0
)
AND art.AID_ARTNR NOT IN (
    SELECT
        AID_ARTNR
    FROM KORT
)
AND art.AID_ARTNR IN (
    SELECT AID_ARTNR
    FROM KORT
    GROUP BY AID_ARTNR
    HAVING SUM(CASE WHEN type = 'A' THEN 1 END) = 0
    AND SUM(CASE WHEN type = 'B' THEN 1 END) > 0
)
AND ART.LogimatKz = 0
AND ART.TeBoKz = 0
AND ART.GardKz = 0
AND ART.DivArt = 0
AND ART.BeschaffArt = 0

Но я не знаю, как вы можете использовать ОБА эти подзапросы KORT , поскольку они кажутся конфликтующими друг с другом.


Пожалуйста, изучите более современные способы определения внешних объединений, используя (+)это не путь больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...