我想做这个
显示所有在 1996 年下订单的客户的客户名称
我用这个
select
Customers.ContactName
from Customers
where
Customers.CustomerID = (
select Orders.CustomerID
from Orders
where year(Orders.OrderDate)=1996
);
但它给出了一个错误。
数据库是罗斯文
我想你的子查询返回多个结果试试这个(注意 IN):
select
Customers.ContactName
from Customers
where
Customers.CustomerID IN (
select Orders.CustomerID
from Orders
where year(Orders.OrderDate)=1996
);
像这样加入试试
SELECT
c.ContactName
FROM Customers c
INNER JOIN Orders o
ON o.CustomerID = c.CustomerId
WHERE YEAR(o.OrderDate) = 1996
尝试:
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 通常是此类查询的首选方法,因为在某些情况下,数据库似乎可以更好地优化它们。