2

Bottom-DollarMarketsによって行われたすべての注文のに行われたすべての注文のOrderIDを表示したいと思います。

私は次のクエリを使用しました

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

しかし、それは複数の値を返したエラーサブクエリを与えます

ノースウィンドデータベースを使用しています

4

1 に答える 1

6

両方のサブクエリが複数の行を返す可能性がありますが、これは、スカラー比較操作を使用している場合は許可されていません。この>場合=は、それぞれとです。

代わりにこれを試してください:

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-DollarMarketsによる最新の注文よりも多い場合は、以前の注文よりも多いため、実際にすべての注文を比較する必要はありません。

あるいは、これは:で動作し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'
);
于 2013-03-03T22:36:24.237 に答える