SQL Server - Как преобразовать подзапросы в объединения для оптимизации запросов - PullRequest
0 голосов
/ 31 октября 2018

это мой пример запроса.

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

Теперь мне нужно изменить этот подзапрос на объединения, так как есть 'ИЛИ', я в замешательстве.

1 Ответ

0 голосов
/ 31 октября 2018

проще в использовании 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
) 
...