我有两个数据库,两个不同的系统。电子数据交换系统和ERP系统如下
我想知道所有不在ErpOrderItem表中的EDI系统订单表中的订单。
A. 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中可用的项目,它们都是通过order key和ErpDocNum链接的订单。这两个系统是通过ErpDocNum在Order_Erp表中链接的。
我试过如下,但这并没有给出我想要的结果。
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发布于 2016-09-06 05:52:17
根据所提供的表模式,中提到的列是错误的(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发布于 2016-09-06 16:03:15
如果我正确理解你的问题,你想要的是一份列在你的电子数据交换系统中的所有产品的清单,而不是在你的ERP系统中?如果这是你想要的,那么这就是你获得这些结果所需要的全部。如果我没有正确理解您的需求,那么提供一个表和预期结果以供澄清通常是有帮助的。
SELECT DISTINCT ProductID
FROM edi.OrderItems AS OI
WHERE NOT EXISTS
(
SELECT 1
FROM ErpOrderItem AS EOI
WHERE OI.ProductID = EOI.ProductID
)https://stackoverflow.com/questions/39341360
复制相似问题