【问题标题】:SQL Query To Retrieve Orders Only Containing Specific Products用于检索仅包含特定产品的订单的 SQL 查询
【发布时间】:2021-05-18 13:14:11
【问题描述】:

假设我有这些表:

Customer(CustomerID as PK), Order(OrderID as PK, CustomerID as FK), OrderDetails(OrderDetalisID as PK, OrderID as PK, ProductID as PK), Products(ProductID as PK, CategoryID as FK) and Category(CategoryID作为PK)。

例如,我怎样才能仅检索包含第 1 类和第 2 类产品的所有订单?

编辑:这是我尝试过的:

SELECT DISTINCT Order.Order_ID, Order.Order_Total, Customer.CustomerName
FROM Orders
JOIN Customers on Orders.CustomerID = Customers.CustomerID
JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID
JOIN Products on OrderDetails.ProductID = Products.ProductID
WHERE Products.ProductID IN ( SELECT Products.ProductID FROM PRODUCTS
JOIN Category on Products.CategoryID = Category.CategoryID
WHERE Category.CategoryID = 1 OR Category.CategoryID = 2);

【问题讨论】:

  • 您尝试过什么,遇到的问题是什么?
  • mysql和sqlite是两种不同的db产品,你用的是哪一种?
  • 我已经编辑了帖子。

标签: sql


【解决方案1】:

如果你只是想检索订单,你可以这样做

select distinct od.OrderId
from OrderDetails od
  join Products p
      on od.ProductId=p.ProductId
where p.CategoryId in (1,2)

您必须使用distinct 子句,因为某些订单可能同时拥有这两个类别的产品

【讨论】:

    【解决方案2】:

    您可以通过join获取类别1和2中产品的订单ID,然后您可以从结果列表中获取所有具有ID的订单:

    SELECT *
    FROM Order
    WHERE OrderID IN (
      SELECT OD.OrderId
      FROM OrderDetails OD
        INNER JOIN Products P
          ON OD.ProductID = P.ProductID 
      WHERE P.CategoryID IN (1, 2)
    )
    

    【讨论】:

    • 我通常会尝试这样做,但这个似乎很简单.. 无论如何添加了我能做的事
    【解决方案3】:

    您可以使用exists 选择同时存在 1 和 2 类别的订单。

    select * from order 
    where exists 
              (
               select 1 from orderdetails od inner join products p on 
               od.productid=p.productid 
               where p.categoryid in (1,2) and od.orderid=o.orderid
               group by orderid 
               having count(distinct categoryid)=2
              )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-27
      • 2018-08-13
      相关资源
      最近更新 更多