我想这样做
显示1996年下订单的所有客户的客户名称
我用这个
select
Customers.ContactName
from Customers
where
Customers.CustomerID = (
select Orders.CustomerID
from Orders
where year(Orders.OrderDate)=1996
);
但它会出错。
数据库是Northwind
答案 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通常是此类查询的首选方法,因为在某些情况下,数据库似乎可以更好地优化它们。