У меня есть таблицы Items, которые имеют следующие столбцы:Как правильно соединить таблицу, которая может вернуть более одной строки
Itemid || AdminUserID || ItemName
И я пытаюсь присоединиться к нему с ItemAttributes:
ItemAttributeId || ItemId || AttributeValue
, где один ItemId может иметь несколько значений ItemAttributeId.
Я создал процедуру для извлечения значений записи из двух таблиц:
SELECT
i.ItemID,
i.AdminUserID,
i.ItemName,
attr1.AttributeValue as IsForEmailRobotProcessingValue,
attr2.AttributeValue as RobotScheduledHoursValue -- HERE IS THE PROBLEM
FROM [dbo].[Items] i WITH (NOLOCK)
LEFT JOIN [dbo].ItemAttributes attr1 WITH(NOLOCK)
ON attr1.ItemID = i.ItemID and attr1.ItemAttributeID = 1
LEFT JOIN [dbo].ItemAttributes attr2 WITH(NOLOCK)
ON attr2.ItemID = i.ItemID and attr2.ItemAttributeID = 2
WHERE ((attr1.AttributeValue IS NOT NULL AND attr1.AttributeValue = 'true') OR
@OnlyForEmailRobotProcessing = 0)
ORDER BY ItemName
Что мне не нравится в том, что я LEFT JOIN в два раза один и тот же стола и создал разные псевдонимы для каждого соединения в соответствии с тем же ItemId. Есть ли лучший способ ЛЕВОЙ ВСТУПИТЬ только один раз и создал два разных псевдонима для каждого ItemAttributeId? Благодаря!
Спасибо за ваш ответ. Считаете ли вы, что это более эффективно, чем моя версия? –
Вы должны проверить планы выполнения, чтобы измерить производительность. – Milen