0

これをやりたい

1996年に注文したすべての顧客の顧客名を表示します

そして私はこれに使用します

select
  Customers.ContactName 
from Customers
where 
  Customers.CustomerID = (
    select Orders.CustomerID 
    from Orders 
    where year(Orders.OrderDate)=1996
  );

しかし、それはエラーを与えます。

データベースはNorthwindです

4

3 に答える 3

2

サブクエリが複数の結果を返していると思います。これを試してください(INに注意してください)。

select
  Customers.ContactName 
from Customers
where 
  Customers.CustomerID IN (
    select Orders.CustomerID 
    from Orders 
    where year(Orders.OrderDate)=1996
  );
于 2013-03-03T20:25:55.823 に答える
1

このように参加してみてください

SELECT
    c.ContactName
FROM Customers c
INNER JOIN Orders o
    ON o.CustomerID = c.CustomerId
WHERE YEAR(o.OrderDate) = 1996
于 2013-03-03T20:26:00.057 に答える
1

試す:

SELECT DISTINCT c.contactName -- DISTINCT because some customers might have multiple orders
FROM customers c
JOIN orders o
    ON o.customerId = c.customerId
    AND year(o.orderDate) = 1996

サブクエリをスカラーと比較するには、サブクエリが正確に1つの結果を返すようにする必要があります(たとえば、SELECT TOP 1...またはSELECTCOUNT(*)...を使用します)。または、EXISTSを使用してサブクエリに行があることを確認するか、INを使用して包含を確認することもできます。ただし、場合によってはデータベースがJOINをより適切に最適化するように見えるため、JOINがこの種のクエリに推奨される方法であることがよくあります。

于 2013-03-03T20:26:22.003 に答える