2016-09-06 47 views
1

我有2個不同系統的數據庫。 EDI系統ERP系統如下T-SQL從另一個數據庫中查找丟失的項目

我想知道所有不在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 

所有訂單的產品編號例如,我想知道OrderItem中的所有項目在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

您需要'outer join'或'except'來找到缺失的項目。 – adrianm

回答

0

按照提供的表模式,條件你提到的列是錯誤的(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 
+0

這是一個錯字,我已經修復了..仍然不給我後的結果 –

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 
)