Сравнение двух столбцов одной строки

Я хочу показать 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'
);
Другие вопросы по тегам