2014-10-04 84 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