Объединить два небольших выбора в один в SQL Server

#sql #sql-server #select #stored-procedures

#sql #sql-сервер #выберите #хранимые процедуры

Вопрос:

Я использую следующие вложенные выборки как часть более крупного запроса.

Есть ли способ объединить их оба в один, чтобы мне не приходилось запускать два отдельных запроса?

 // ...
R.requester,
(
    SELECT      A.Email AS requesterEmail
    FROM        LogTable A
    WHERE       A.NTID = R.requester
    FOR XML PATH(''), ELEMENTS, TYPE
),
R.approver,
(
    SELECT      B.Email AS approverEmail
    FROM        LogTable B
    WHERE       B.NTID = R.approver
    FOR XML PATH(''), ELEMENTS, TYPE
),
// ...
  

Комментарии:

1. Вы можете увидеть прямо здесь, надеюсь, вы сможете помочь dba.stackexchange.com/questions/47861 /…

Ответ №1:

 SELECT A.Email AS requesterEmail,B.Email AS approverEmail
    FROM  LogTable B
JOIN LogTable A
    ON B.NTID = R.approver AND A.NTID = R.requester
    FOR XML PATH(''), ELEMENTS, TYPE
  

Комментарии:

1. Это оказалось именно тем, что мне было нужно — отлично работает! Большое спасибо за это!

Ответ №2:

Если запросы возвращают одни и те же данные, вы можете ОБЪЕДИНИТЬ ВСЕ

 SELECT      A.Email AS requesterEmail
FROM        LogTable A
WHERE       A.NTID = R.requester
FOR XML PATH(''), ELEMENTS, TYPE

union all

(
   SELECT      B.Email AS approverEmail
   FROM        LogTable B
   WHERE       B.NTID = R.approver
   FOR XML PATH(''), ELEMENTS, TYPE
)
  

Комментарии:

1. Спасибо за это! К сожалению, оказалось, что это не работает для меня, поскольку я не могу использовать строки FOR в этом случае.

2. Поэтому вам лучше использовать решение от Mihai