我有一个查询,查询中有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_ARTNR
,KORT
A和TYPE
中可能有2种不同类型的条目
如果我现在有TYPE B
的{{1}}条目,则该语句不应显示结果,这是有效的。
现在我以某种方式还必须排除TYPE A
表中的art.AID_ARTNR
和B,也不允许显示它,这也行得通,因为{{1} }在TYPE A
到目前为止一切顺利
但是
结果必须显示KORT
中是否有art.AID_ARTNR
的条目,但没有KORT
的条目,我无法弄清楚如何正确地进行操作,也许这很简单而我只是想变得复杂..
也许有人可以帮助我
答案 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子查询,因为它们似乎相互冲突。
请了解使用现代(+)
定义外部联接的方法。