2013-03-03 3 views
1

я хочу Показать ИД_заказа всех заказов, где размещены после все заказы, размещенные Bottom-доллар рынков.сравнения два столбца той же строки

я использовал fllowing запрос

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' 
      ) 
     ); 

, но он дает ошибку подзапрос Returened более чем одно значение

я использую Northwind базы данных

ответ

5

Оба ваших подзапросов может возвращать несколько строк , что не допускается, если вы используете скалярную операцию сравнения - > и =, соответственно, в вашем случае.

Попробуйте вместо этого:

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-доллар рынков, то он также превосходит прежние порядки.

В качестве альтернативы это будет работать с 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' 
); 
Смежные вопросы