0

我想做这个

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

我用这个

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

但它给出了一个错误。

数据库是罗斯文

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

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

于 2013-03-03T20:26:22.003 回答