Acumatica SQL 到 BQL - 不在

Acumatica SQL to BQL - Not In

美好的一天

我正在尝试将我的 SQL 转换为 BQL,但我不知道如何在 BQL 中执行 NOT IN 语句。我在搜索中使用了 NotIn2 我不确定这是否正确? 如果我使用它,我会不断遇到超时问题,所以我无法测试

SELECT INTran.*, 
FROM INTran
     JOIN INTranSplit ON INTran.RefNbr = INTranSplit.RefNbr                             
     JOIN InventoryItem ON InventoryItem.InventoryID = INTran.InventoryID                              
WHERE INTran.LotSerialNbr NOT IN
(
    SELECT LotSerialNbr
    FROM SOShipLineSplit
)
AND InventoryItem.inventoryCD = 'NIS004';

我将在下面的 foreach 循环中使用它:

 foreach (INTran item in PXSelectJoin<
                            INTran,
                            LeftJoin<INTranSplit,
                                On<INTranSplit.refNbr, Equal<INTran.refNbr>>,
                            LeftJoin<InventoryItem,
                                On< INTran.inventoryID, Equal<InventoryItem.inventoryID>>>>,
                            Where<INTran.lotSerialNbr, NotIn2<Search<SOShipLineSplit.lotSerialNbr>>,
                            And<InventoryItem.inventoryCD, Equal<Required<InventoryItem.inventoryCD>>>>
                            >.Select(Base, "NIS004")){}

好吧,您无法在 BQL 中轻松地使用 subselect 实现 NotIn。但这是您可以做的: 您可以使用 join:

更改 select 以获得相同的结果
 PXSelectJoin<INTran, 
 InnerJoin<INTranSplit, On<...>, 
 InnerJoin<InventoryItem, On<...>, 
 LeftJoin<SOShipLineSplit, On<SOShipLineSplit.lotSerialNbr, Equal<INTran.lotSerialNbr>>>>>,
 Where<InventoryItem.inventoryCD, Equal<Required<InventoryItem.inventoryCD>>,
 And<SOShipLineSplit.ShipmentNbr, IsNull>>

在该示例中,您只会 select 行未找到 SOShipLineSplit