Разница между присоединением и подзапросом в SQL Server 2017 - PullRequest
0 голосов
/ 05 мая 2020

Это мой первый запрос:

select 
    r.[ProductID], [Name],
    [Color], [UnitPrice] 
from 
    [Production].[Product] r  
inner join 
    [Sales].[SalesOrderDetail] d on d.productid = r.productid

Это мой второй запрос:

select [ProductID], [Name], [color] 
from [Production].[Product] o 
where [ProductID] in (select [UnitPrice] 
                      from [Sales].[SalesOrderDetail] s
                      where s.ProductID = o.ProductID) 

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

1 Ответ

1 голос
/ 05 мая 2020

Вы можете использовать exists:

select p.*
from product p
where exists (select 1 from SalesOrderDetail sd where sd.productid = p.product);

Ваш второй запрос не совпадает с первым запросом. Он сравнивает ProductID с UnitPrice, что недействительно. Результатов не должно быть.

Для исходной версии запроса вы можете просто изменить цену единицы дополнительного запроса с помощью Productid:

where [ProductID] in (select sd.productid from SalesOrderDetail sd)

Однако, если вы хотите unitprice (который доступен в SalesOrderDetail), тогда этот подзапрос вам не поможет. Вместо этого вам нужно JOIN.

...