首页 > 解决方案 > MySQL Where IN 必须匹配所有值

问题描述

我的 sql 脚本:

select
    pack_id 
from
    pack_product pp 
where
    pp.product_id in (2,1) 
group by
    pack_id

数据示例:

pack_id  | product_id
1        | 1
2        | 1
2        | 2

我只想返回 pack_id 2 因为匹配所有值,但是这个脚本返回 pack_id 1 和 2。

标签: mysqlsqlrelational-division

解决方案


尝试使用 having 子句将过滤约束应用于pack_id具有所有可能值的 s 组,例如

架构(MySQL v5.7)

CREATE TABLE pack_product (
  `pack_id` INTEGER,
  `product_id` INTEGER
);

INSERT INTO pack_product
  (`pack_id`, `product_id`)
VALUES
  ('1', '1'),
  ('1', '1'),
  ('2', '1'),
  ('2', '2');

查询 #1

select
    pack_id 
from
    pack_product pp 
group by
    pack_id
having
    COUNT( DISTINCT CASE WHEN pp.product_id in (2,1) THEN pp.product_id END)=2;
pack_id
2

在 DB Fiddle 上查看工作演示


推荐阅读