Sql 关于连接表的多个条件

Sql 关于连接表的多个条件,sql,inner-join,Sql,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

是否可以使用不同的条件与单个表进行内部联接? 我想知道是否可以将以下查询合并为一个查询:

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  
那么:

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
                                                 )
                                           )

是的,这是可能的,您可以在
连接中使用
。但是,这可能会返回多个结果——它应该使用哪一个?如果我使用,性能是否会因此受到影响?单个查询应该比三个查询快——尽管如此,请自己尝试一下。但我指的是,如果您的第一条语句将帐户更新为一个值,则您的第二条或第三条语句可以更改该值。在更新值时,最好明确显示预期结果。我认为这应该很好,因为一次只有这三组条件中的一组有效。谢谢!我可以知道性能方面,这是更好的一个还是执行三个查询?您可以通过使用BEGIN TRAN…回滚并查看执行计划来测试这一点。这将取决于发挥作用的指数。