代码之家  ›  专栏  ›  技术社区  ›  lannyf

如何通过订单id获取零件id,并且零件没有其他人订购

sql
  •  0
  • lannyf  · 技术社区  · 6 年前

    Having表有orer\u id和part\u id字段。该部件可以存在于多个订单中,例如123456可以存在于000000000001和000000000002订单中

    | order_id     | part_id | 
    =========================|
    | 000000000001 | 00123   |  
    | 000000000001 | 00456   | 
    | 000000000001 | 00789   | 
    | 000000000002 | 00123   | 
    | 000000000002 | 00456   | 
    

    想找出订单号订购的零件号,但除了提供的订单号外,其他人不订购零件号。

    例如,querybyorder\u id=000000000001,并希望看到结果{789}(因为123和456也是按其他order\u id排序的)

    2 回复  |  直到 6 年前
        1
  •  1
  •   uSeruSher    6 年前

    使用子查询

    select * from yourtable a
    where order_id = '1'
    and part_id not in (select part_id from yourtable where order_id <> a.order_id)
    
        2
  •  1
  •   sticky bit    6 年前

    你可以用 NOT EXISTS 以及一个相关子查询,用于检查具有相同部分的其他订单。

    SELECT t1.part_id
           FROM elbat t1
           WHERE t1.order_id = '000000000001'
                 AND NOT EXISTS (SELECT *
                                        FROM elbat t2
                                        WHERE t2.order_id <> t1.order_id
                                              AND t2.part_id = t1.part_id);