Сравнение двух столбцов одной строки
Я хочу показать OrderID всех заказов, которые были размещены после всех заказов, размещенных Bottom-Dollar Markets.
я использовал бросающий запрос
select
Orders.OrderID
from
Orders
where
Orders.OrderDate > (
select
Orders.OrderDate
from
Orders
where
Orders.CustomerID = (
select
Customers.CustomerID
from
Customers
where
Customers.CompanyName='Bottom-Dollar Markets'
)
);
но это дает подзапросу ошибки, восстановленному больше чем одно значение
я использую базу данных Northwind
1 ответ
Решение
Оба ваших подзапроса могут возвращать несколько строк, что недопустимо при использовании операции скалярного сравнения - >
а также =
соответственно в вашем случае.
Попробуйте это вместо этого:
select Orders.OrderID
from Orders
where Orders.OrderDate > (
select max(Orders.OrderDate)
from Orders
where Orders.CustomerID in (
select Customers.CustomerID
from Customers
where Customers.CompanyName='Bottom-Dollar Markets'
)
);
На самом деле вам не нужно сравнивать все заказы, поскольку, если заказ клиента больше, чем последний заказ, размещенный Bottom-Dollar Markets, то из этого следует, что он также больше, чем более ранние заказы.
В качестве альтернативы это будет работать с JOIN
:
select Orders.OrderID
from Orders
where Orders.OrderDate > (
select max(Orders.OrderDate)
from Orders join Customers on Orders.CustomerID = Customers.CustomerID
where Customers.CompanyName='Bottom-Dollar Markets'
);