目的是找到父母,因为它是孩子。例如,假设您有一个营销包(也称为“组合”),并希望根据其中的产品来匹配它。示例表/数据:
create table marketing_package_product (
package_id int not null references marketing_package(id),
product_id int not null references product(id),
primary key (package_id, product_id)
);
insert into marketing_package_product values
(1,1),
(1,2),
(1,3),
(2,1),
(2,5);
给定产品 1、2、3,我想获得 marketing_package 1。但仅给定产品 1,2 我不想要 marketing_package 1。
是否有此类查询的名称,最有效的方法是什么?
您正在解决的问题称为关系除法,有两种变体,即“带余数的除法”和“精确除法”(符合您的描述)。
另请参阅本文:Divided We Stand:关系部门的 SQL
StackOVerflow 上的这个问题:How to filter SQL results in a has-many-through relation有几种方法可以解决它和 Postgres 的基准,但它不是针对确切的变化,只是针对“Division with Remainder”。查询将是相似的,但必须为确切的变化添加额外的检查/条件。
解决此问题的一种方法(太多)是自行加入表格的次数与“产品”一样多,然后进行额外检查,因此只保留包含这些产品的包裹:
另一个是 to
GROUP BY
然后是两个HAVING
条件,一个用于除法,另一个用于“精确性”:@n
在这种情况2
下,支票中的产品数量在哪里。在SQL-Fiddle测试。