选择在特定年份下订单的客户

时间:2013-03-03 20:22:50

标签: sql selection

我想这样做

  

显示1996年下订单的所有客户的客户名称

我用这个

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

但它会出错。

数据库是Northwind

3 个答案:

答案 0 :(得分:2)

我想你的子查询返回多个结果试试这个(注意IN):

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

答案 1 :(得分:1)

尝试使用像这样的连接

SELECT
    c.ContactName
FROM Customers c
INNER JOIN Orders o
    ON o.CustomerID = c.CustomerId
WHERE YEAR(o.OrderDate) = 1996

答案 2 :(得分: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

为了将子查询与标量进行比较,您需要确保子查询只返回一个结果(例如,使用SELECT TOP 1 ...或SELECT COUNT(*)...)。或者,您可以使用EXISTS检查子查询是否包含行,或使用IN检查包含。但是,JOIN通常是此类查询的首选方法,因为在某些情况下,数据库似乎可以更好地优化它们。