2014-10-04 115 views
0

如果可以使用單個表進行INNER JOIN,但條件不同? 我想知道是否有可能以以下查詢合併爲一個:連接表時的多個條件

UPDATE st 
SET st.GLAccount = gt.GLAccount 
FROM StockTransactions st 
INNER JOIN GLTransactions gt ON gt.TransactionID = st.PurchaseTransactionID 
           AND gt.Quantity IS NOT NULL AND st.Item = gt.Item 
Go 


UPDATE st 
SET st.GLAccount = gt.GLAccount 
FROM StockTransactions st 
INNER JOIN GLTransactions gt ON gt.TransactionID = st.ID AND st.Item = gt.Item 
           AND (st.Type = 160 OR st.Type = 165) 
GO    


UPDATE st 
SET st.GLAccount = gt.GLAccount 
FROM StockTransactions st 
INNER JOIN GLTransactions gt ON gt.TransactionID = st.ID AND st.Item = gt.Item 
           AND gt.LineType = 1 
GO 
+0

是的,它是可能的,你可以在'join'使用'或'。但是,這可能會返回多個結果 - 應該使用哪個結果? – sgeddes 2014-10-04 03:15:11

+0

如果我使用OR,性能會受到影響嗎? – Afflatus 2014-10-04 03:57:07

+0

單個查詢應該比三個查詢快 - 但一如既往,自己嘗試一下。我所指的是,如果你的第一個陳述更新賬戶的價值,你的第二個或第三個可以改變這個價值。更新值時,最好對預期結果進行明確。 – sgeddes 2014-10-04 04:00:49

回答

2

如何:

UPDATE st 
SET  st.GLAccount = gt.GLAccount 
FROM StockTransactions st 
     INNER JOIN GLTransactions gt ON (gt.TransactionID = st.PurchaseTransactionID 
              AND gt.Quantity IS NOT NULL 
              AND st.Item = gt.Item 
             ) 
             OR (gt.TransactionID = st.ID 
              AND st.Item = gt.Item 
              AND ((st.Type = 160 
                OR st.Type = 165 
                ) 
                OR gt.LineType = 1 
               ) 
              ) 
+0

謝謝!我可以知道性能方面是更好還是有三個查詢執行? – Afflatus 2014-10-04 03:54:11

+0

您可以使用BEGIN TRAN ... ROLLBACK並查看執行計劃來測試自己。這將取決於所使用的索引。 – 2014-10-04 05:14:02