【问题标题】:Give the name of customers who bought ALL products with price less than 5给出购买价格低于 5 的所有产品的客户的名称
【发布时间】:2019-04-24 08:15:44
【问题描述】:

我想写一个查询,只给出那些购买了价格低于 5 的所有产品的客户的名称。而我的查询给出了所有购买了价格低于 5 的单一产品的客户。

SELECT Customers.CompanyName AS Customers
FROM Customers
INNER JOIN Orders
ON Orders.CustomerID = Customers.CustomerID
JOIN [Order Details]
ON [Order Details].OrderID = Orders.OrderID
JOIN Products
ON Products.ProductID = [Order Details].ProductID
WHERE [Order Details].ProductID  IN (
  SELECT Products.ProductID FROM Products WHERE Products.UnitPrice < 5
)

【问题讨论】:

  • 添加存在.......
  • 提供一个带有数据的最小运行示例。
  • 在最后一行,尝试将1=1 AND 放在WHERE 之后,您应该会得到一个要求所有实例都为真的条件。

标签: sql-server tsql relational-division northwind


【解决方案1】:

您可以尝试以下方法:

SELECT Customers.CompanyName AS Customers
FROM Customers
INNER JOIN Orders
ON Orders.CustomerID = Customers.CustomerID
JOIN [Order Details]
ON [Order Details].OrderID = Orders.OrderID
JOIN Products
ON Products.ProductID = [Order Details].ProductID
WHERE [Order Details].ProductID  IN (
  SELECT Products.ProductID FROM Products WHERE Products.UnitPrice < 5)
GROUP BY CompanyName 
HAVING COUNT([Order Details].ProductID) = (SELECT Count(Products.ProductID) FROM Products WHERE Products.UnitPrice < 5)

我加入了 GROUP BY 和 Have 子句,这样你就只能得到购买了所有单价小于 5 产品的客户

【讨论】:

  • 此查询给出错误:每个 GROUP BY 表达式必须包含至少一列不是外部引用。
  • 刚刚在northwind数据库上测试了这个,它可以工作,进行了编辑以修复一个被省略的)
  • 我修复了那个括号')'的问题,之后我遇到了上面的错误'每个 GROUP BY 表达式必须包含至少一个不是外部引用的列'。
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2021-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-04
相关资源
最近更新 更多