如何同时使用NOT EXISTS和JOIN?

问题描述

我们需要显示BOS_BARCODE_IT_LOG中的UID,但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]才能显示

enter image description here

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

我尝试过的。

我仅从一个没有OITM的表中进行选择,但是,没有提供查询选择条件。

我也尝试过

SELECT X0."DATE",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

谢谢。

解决方法

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

我不了解您的查询与问题的实际关系(它们还有一个附加表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进行过滤,则可以加入(如果itemcode中每个oitm的行数不超过一行),或使用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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...