Fetching only rows that match all entries in a joined table (SQL)

前端 未结 2 1533
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-15 06:09

I have the following five tables:

  • ISP
  • Product
  • Connection
  • AddOn
  • AddOn/Product (pivot table for many-to-many relationship).
2条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-15 06:52

    You could add to the WHERE clause:

    AND NOT EXISTS (SELECT NULL FROM addon a2
                    WHERE  a2.addon_id IN (1,14,237)
                    AND NOT EXISTS
                    ( SELECT NULL
                      FROM   product_addon pa2
                      WHERE  pa2.addon_id = a2.addon_id
                      AND    pa2.product_id = p.product_id
                    )
                   )
    

    Or equivalently:

    AND NOT EXISTS (SELECT NULL FROM addon a2
                    LEFT JOIN product_addon pa2
                      ON pa2.addon_id = a2.addon_id
                     AND pa2.product_id = p.product_id
                    WHERE a2.addon_id IN (1,14,237)
                    AND   pa2.product_id IS NULL
                    )
                   )
    

提交回复
热议问题