Выбор SQL Server с двумя предложениями IN в условиях - PullRequest
0 голосов
/ 18 октября 2019

Я застрял в написании запроса. Это простой запрос, но у меня есть некоторые сомнения. Поэтому мне нужны новые подходы к задаче

DECLARE @ordersToSet TABLE 
                     (
                         [Id] [BIGINT] NOT NULL,
                         [AttributeId] [BIGINT] NOT NULL
                     )

SELECT * 
FROM dbo.Order_Attributes
WHERE OrderAttributeID IN (SELECT AttributeId
                           FROM @ordersToSet) 
  AND OrderID IN (SELECT Id
                  FROM @ordersToSet)

Что я хочу: запрос должен возвращать только те Order_Attributes, где OrderId и AttributeId соответствуют соответствующим значениям во временной таблице @ordersToSet.

Почему я думаю, что приведенный выше код может привести к неожиданным результатам:

@ordersToSet таблица содержит следующие строки

    Id     | AttributeId
    -------+------------
    486455 | 12

OrderAttributes таблица содержит следующее:

    OrderID | OrderAttributeID
    --------+-----------------
    486455  | 11
    635201  | 12

В этом случае он НЕ должен выбирать какую-либо строку, однако я сомневаюсь, что он выбирает строку со значениями OrderId = 486455 и AttributeId = 12

1 Ответ

3 голосов
/ 18 октября 2019

Запрос должен возвращать только те Order_Attributes, где оба значения OrderId и AttributeId соответствуют соответствующим значениям в временной таблице @ordersToSet.

Вы, похоже, ищетепростой JOIN:

SELECT a.*
FROM dbo.Order_Attributes a 
INNER JOIN @ordersToSet s
    ON a.OrderAttributeID = s.AttributeId AND a.OrderID = s.Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...