Оптимизация SQL-запросов с помощью Join - PullRequest
0 голосов
/ 26 октября 2018

Я использовал 2 переменные с оператором SELECT для каждой.

Мне сказали, что я могу оптимизировать свой запрос, используя JOIN, чтобы выполнить запрос только один раз.

Мне удалось объединить утверждение в одно.Но он не использовал JOIN, и в моем текущем запросе все еще есть 2 SELECT операторов.

Текущий запрос:

BEGIN

DECLARE @EntityId int, @Country nvarchar(10), @OrganizationId int, 
@Username nvarchar(100) = 'user1'

Set @OrganizationId = (SELECT BU.OrganizationId 
FROM [Company].[Config].[BusinessUnit] BU 
WHERE BU.EntityId = (SELECT BU.EntityId
FROM [Company].[PES].[EmployeeProfile] EP
LEFT JOIN   Config.BusinessUnit bu on EP.EntityCode = BU.EntityCode
WHERE EP.Username = @Username))

IF(@OrganizationId = 3)
    SET @Country = 'MS'
ELSE
    SET @Country = 'SG'
SELECT @Country

END

Является ли мой текущий запросвопрос хорош, или его можно еще улучшить?Спасибо.


Предыдущий запрос:

BEGIN

DECLARE @EntityId int, @Country nvarchar(10), @OrganizationId int, 
@Username nvarchar(100) = 'user1'

Set @EntityId = (SELECT BU.EntityId
FROM [Company].[PES].[EmployeeProfile] EP
LEFT JOIN   Config.BusinessUnit bu on EP.EntityCode = BU.EntityCode
WHERE EP.Username = @Username)

Set @OrganizationId = (SELECT BU.OrganizationId 
FROM [Company].[PES].[BusinessUnit] BU 
WHERE @EntityId = BU.EntityId)

IF(@OrganizationId = 3)
    SET @Country = 'MS'
ELSE
    SET @Country = 'SG'
SELECT @Country

END

1 Ответ

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

Почему бы не объединить это в один запрос?

SELECT @Country = (CASE WHEN @OrganizationId = 3 THEN 'MS'
                        ELSE 'SG'
                   END)
FROM [Company].[PES].[EmployeeProfile] EP JOIN
     Config.BusinessUnit cbu 
     ON EP.EntityCode = cbu.EntityCode JOIN
     [Company].[PES].[BusinessUnit] BU 
     ON cbu.EntityId = bu.EntityId
WHERE EP.Username = @Username)
...