SQL Server-如何将子查询更改为联接以进行查询优化

时间:2018-10-31 06:51:23

标签: sql-server query-optimization

这是我的示例查询。

SELECT * FROM SW_TBL_PROFILE_AGENTS agent
WHERE( 
    agent.MSISDN in(SELECT Source_Wallet_ID FROM SW_TBL_TRANSACTION WHERE Source_Wallet_ID = agent.MSISDN)
    OR
    agent.MSISDN in (SELECT Dest_Wallet_ID FROM SW_TBL_TRANSACTION WHERE Dest_Wallet_ID = agent.MSISDN)
)

现在我需要将这个子查询更改为联接,因为存在一个'OR',我很困惑。

1 个答案:

答案 0 :(得分:1)

使用EXISTS

更容易

如果您只看一种情况

WHERE 
    agent.MSISDN in (SELECT Source_Wallet_ID FROM SW_TBL_TRANSACTION WHERE Source_Wallet_ID = agent.MSISDN)

基本上这可以重写为

WHERE (SELECT * FROM SW_TBL_TRANSACTION t WHERE t.Source_Wallet_ID = agent.MSISDN)

要为Dest_Wallet_ID添加其他条件,只需在OR查询中使用EXISTS

SELECT * 
FROM   SW_TBL_PROFILE_AGENTS agent
WHERE EXISTS
( 
       SELECT *
       FROM   SW_TBL_TRANSACTION t
       WHERE  t.Source_Wallet_ID = agent.MSISDN
       OR     t.Dest_Wallet_ID   = agent.MSISDN
)