从结果集中排除结果

时间:2018-09-13 08:06:47

标签: sql database oracle join

我有一个查询,查询中有Map<Long, String> map = new HashMap<>(); map.put(1L, "янв"); map.put(2L, "фев"); map.put(3L, "мар"); map.put(4L, "апр"); map.put(5L, "май"); map.put(6L, "июн"); map.put(7L, "июл"); map.put(8L, "авг"); map.put(9L, "сен"); map.put(10L, "окт"); map.put(11L, "ноя"); map.put(12L, "дек"); DateTimeFormatter fmt = new DateTimeFormatterBuilder() .appendPattern("dd ") .appendText(ChronoField.MONTH_OF_YEAR, map) .appendPattern(" yyyy") .toFormatter(new Locale("ru")); System.out.println(LocalDate.parse("12 сен 2018", fmt)); // 2018-09-12 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_ARTNRKORT A和TYPE中可能有2种不同类型的条目

如果我现在有TYPE B的{​​{1}}条目,则该语句不应显示结果,这是有效的。

现在我以某种方式还必须排除TYPE A表中的art.AID_ARTNR和B,也不允许显示它,这也行得通,因为{{1} }在TYPE A

到目前为止一切顺利

但是

结果必须显示KORT中是否有art.AID_ARTNR的条目,但没有KORT的条目,我无法弄清楚如何正确地进行操作,也许这很简单而我只是想变得复杂..

也许有人可以帮助我

1 个答案:

答案 0 :(得分:0)

要显示IF是否有类型B的条目,而没有类型A的条目,我想您可以使用在hading子句中使用case表达式的总和来类似于下面看到的额外子查询。

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子查询,因为它们似乎相互冲突。


请了解使用现代(+)定义外部联接的方法。