Nic*_*nco 1 sql postgresql aggregate-functions
表格:
-- products --
   id
-- categories --
   id
-- products_categories --
   id
   product_id
   category_id
什么是SQL查询,它返回与给定的category_ids列表匹配的所有产品ID?
示例:给定列表(3,4,5)我希望所有具有最少(可能更多)类别ID 3和类别ID 4以及类别ID 5的product_ids?
使用:
  SELECT p.id
    FROM PRODUCTS p
    JOIN PRODUCTS_CATEGORIES pc ON pc.product_id = p.id
    JOIN CATEGORIES c ON c.id = pc.category_id
   WHERE c.id IN (3,4,5)
GROUP BY p.id
  HAVING COUNT(DISTINCT c.id) = 3
这通常被称为Celko的分部.
在COUNT(DISTINCT c.id)必须等于规定值的数量IN子句.否则,重复的4/3/5 /等将是误报.但是,如果所有对product_id, category_id都保证是唯一的,DISTINCT则可以省略.