【问题标题】:How to use NOT EXISTS and JOIN at the same time?如何同时使用 NOT EXISTS 和 JOIN?
【发布时间】:2025-12-21 09:10:12
【问题描述】:

我们需要显示在 BOS_BARCODE_IT_LOG 中但在 BOS_BARCODE_DO_LOG 中不存在的 UID

我加入 OITM 的原因是因为用户在 SAP Business One 中要求选择标准。

SELECT X0."DATE",X0."ITEMCODE", X0."UID"
FROM "BOS_BARCODE_IT_LOG" X0 JOIN OITM X1 ON

X0."ITEMCODE" = X1."ItemCode"

WHERE
X1."ItemCode" =  '[%0]'

AND  NOT EXISTS (
SELECT X2."UID" FROM "BOS_BARCODE_DO_LOG" X2
WHERE X0."ITEMCODE" = X2."ITEMCODE" AND
X0."UID" = X2."UID" AND
X0."DATE" = X2."DATE"
)

我们需要那个 '[%0]' 来显示

问题是,当我尝试在那里搜索任何项目时,查询没有返回任何结果。

我已经尝试过了。

我只从一个没有 OITM 的表中进行选择,而且仍然没有提供查询选择标准。

我也试过了

SELECT X0."DATE",X0."ITEMCODE", X0."UID"
FROM "BOS_BARCODE_IT_LOG" X0

WHERE 

X0."ITEMCODE" = '[%0]' AND

NOT EXISTS (
SELECT X1."UID" FROM "BOS_BARCODE_DO_LOG" X1
WHERE X0."ITEMCODE" = X1."ITEMCODE" AND
X0."UID" = X1."UID" AND
X0."DATE" = X1."DATE"
)

它提供了错误。

1)。 [SAP AG][LIBODBCHDB DLL][HDBODBC] 语法错误或访问冲突;257 sql 语法错误:")" 附近的语法不正确:第 14 列第 1 行“收到警报”(OAIB)(在 pos 299)

另一件事,是否可以对多个表使用子查询并提供预期结果(不仅仅是空白结果)

我在教程中了解到子查询仅用于一个表。 这是其中一个例子。

https://www.tutorialspoint.com/sql/sql-sub-queries.htm

谢谢。

【问题讨论】:

    标签: sql hana sapb1


    【解决方案1】:

    我们需要显示在BOS_BARCODE_IT_LOG 中但在BOS_BARCODE_DO_LOG 中不存在的UID

    我不明白您的查询与问题的实际关系(他们有一个额外的表oitm,以及更多列)。从您的问题描述来看,您似乎想要:

    select bi.uid
    from bos_barcode_it_log bi
    where not exists (select 1 from bos_barcode_do_log bd where bd.uid = bi.uid)
    

    如果需要oitm进行过滤,可以加入(如果oitm中每个itemcode不超过一行),或者使用exists

    select bi.uid
    from bos_barcode_it_log bi
    where 
        exists (select 1 from oitm o where o.itemcode = bi.itemcode)
        and not exists (select 1 from bos_barcode_do_log bd where bd.uid = bi.uid)
    

    【讨论】:

    • 是的,但是。我需要加入另一个名为 OITM 的表。可能吗?如果我包含表格的结构会有帮助吗?
    • @MarioSaputra:我在答案中添加了另一个查询。
    • 您添加的其他代码实际上是一个很好的代码。但是,它错过了我需要的要求,即输入参数设置。在 SAP 中,我们需要在查询中包含“[%0]”。我试图将“[%0]”放在内部查询中,它立即给出了 no 结果,而不是要求用户输入某些项目代码。我这里提到的输入参数在原帖图片中提供。
    • 这是我尝试过的。选择 bi.uid, bi.ItemCode, bi.date from bos_barcode_it_log bi where exists (select 1 from oitm o where o.itemcode = bi.itemcode and o.itemcode = '[%0]') and not exists (select 1 from bos_barcode_do_log bd 其中 bd.uid = bi.uid)
    最近更新 更多