问题描述
我们需要显示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]才能显示
问题是,当我尝试搜索那里的任何项目时,查询没有返回结果。
我尝试过的。
我仅从一个没有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)