我有2个不同系统的数据库。 EDI系统和 ERP系统如下
我想知道 EDI系统订单表
中所有订单不在 ErpOrderItem 表中的所有ProductIdA. EDI System
Order
----
1. OrderId
2. OrderDate
OrderItems
---------
1. OrderItemId
2. OrderId
3. ProductId
Order_Erp
------
1. OrderId
2. ErpDocNum
ERP System
ErpOrder
-------
1. ErpDocNum
2. DocEntry
ErpOrderItem
----
1. DocEntry
2. ProductId
例如,我想知道OrderItems中的所有项目在ErpOrderItem中不可用于按订单键和ErpDocNum链接的订单。这两个系统由Order_Erp表中的ErpDocNum链接
我试过如下,但它没有给出我追求的结果。
select * from edi.Orders ODR
INNER JOIN edi.Order_Erp ERDR ON ODR.OrderId = ERDR.OrderId
INNER JOIN edi.OrdersItems ODRL ON ODR.OrderId = ODRL.OrderId
INNER JOIN ErpOrder ON ERDR.ErpDocNum = ErpOrder.ErpDocNum
INNER JOIN ErpOrderItem ON ErpOrder.DocEntry = ErpOrderItem.DocEntry
where ErpOrder.ProductId != ODRL.Productid collate SQL_Latin1_General_CP1_CI_AS
答案 0 :(得分:0)
根据提供的表格模式,您的on条件中提到的列是错误的(ON ERDR.ErpOrderNumber = ErpOrder.DocNum )
SELECT *
FROM edi.Orders ODR
INNER JOIN edi.Order_Erp ERDR ON ODR.OrderId = ERDR.OrderId
INNER JOIN edi.OrdersItems ODRL ON ODR.OrderId = ODRL.OrderId
INNER JOIN ErpOrder ON ERDR.ErpDocNum = ErpOrder.ErpDocNum
INNER JOIN ErpOrderItem ON ErpOrder.DocEntry = ErpOrderItem.DocEntry
WHERE ErpOrder.ProductId != ODRL.Productid collate SQL_Latin1_General_CP1_CI_AS
答案 1 :(得分:0)
如果我正确理解您的问题,您所追求的是您的EDI系统中但不在ERP系统中的所有产品的列表?如果这就是你想要的,那么这应该是获得这些结果所需的全部内容。如果我没有正确理解您的要求,那么提供一个表格示例和预期结果通常会有所帮助
SELECT DISTINCT ProductID
FROM edi.OrderItems AS OI
WHERE NOT EXISTS
(
SELECT 1
FROM ErpOrderItem AS EOI
WHERE OI.ProductID = EOI.ProductID
)