【问题标题】:SQL - returning values when a condition is met for that value over two or more rowsSQL - 在两行或多行上满足该值的条件时返回值
【发布时间】:2023-03-16 21:50:01
【问题描述】:

我有两个数据表 -

订单级别:

Order_number | order total | etc
Order_num1   | $10
Order_num2   | $20

以及订单项级别:

Order_number | sku  | quantity | etc    
Order_num1   | sku1 | 3    
Order_num1   | sku2 | 2    
Order_num2   | sku1 | 4

等等。

我正在尝试编写一个查询,该查询返回包含 skuY 和 skuZ 的任何 Order_numX。

我正在考虑以某种方式对订单项表进行分组,但我不确定。

任何帮助表示赞赏!谢谢。

【问题讨论】:

    标签: sql database group-by uniqueidentifier


    【解决方案1】:

    你可以使用聚合和having:

    select order_number
    from line_item
    where sku in (?, ?)
    group by order_number
    having count(distinct sku) = 2;  -- number of items in list
    

    【讨论】:

      【解决方案2】:

      所以我建议你使用EXISTS函数:

      SELECT *
      FROM Order
      WHERE EXISTS(SELECT 1
                   FROM line-item
                   WHERE line-item.Order_number=Order.Order_number
                   AND line-item.sku='skuY'
                   )
      AND EXISTS(SELECT 1
                   FROM line-item
                   WHERE line-item.Order_number=Order.Order_number
                   AND line-item.sku='skuZ'
                   )
      

      此查询为您提供子表的sku 列的skuYskuZ 值的订单,这里是line-item

      【讨论】:

        【解决方案3】:
        SELECT Order_number 
        FROM line_item 
        GROUP BY Order_number 
        HAVING COUNT( CASE WHEN sku = skuY THEN 1 END) > 0
           AND COUNT( CASE WHEN sku = skuZ THEN 1 END) > 0
        

        【讨论】:

          猜你喜欢
          • 2022-10-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-30
          • 2021-11-28
          • 1970-01-01
          • 1970-01-01
          • 2014-11-25
          相关资源
          最近更新 更多