mysql – 如何编写SQL查询以检查一个表上的多对多关系是否是另一个表上多对多关系的子集?

我有一些模型如下:

Product:
  id
  name
  price

Order:
  id
  user
  created

OrderProduct:
  order_id
  product_id

Promo:
  id
  discount

PromoProduct:
  promo_id
  product_id

如果促销中的所有产品都存在于订单中,则促销适用于订单.如何编写SQL查询以查找适用于订单的促销活动?

最佳答案
SELECT  *
FROM    promo p
WHERE   id NOT IN
        (
        SELECT  pp.promo_id
        FROM    promoProduct pp
        WHERE   pp.product_id NOT IN
                (
                SELECT  product_id
                FROM    orderProduct op
                WHERE   op.order_id = $order
                )
        )

请注意,这也会返回所有带有空产品列表的促销活动(“这个机库中没有我无法飞行的飞机”).如果这是一个问题,您需要额外检查促销的非空虚.

转载注明原文:mysql – 如何编写SQL查询以检查一个表上的多对多关系是否是另一个表上多对多关系的子集? - 代码日志