SQL中使用NOT IN条件筛选符合指定部门编码要求的产品ID
实现SQL语句
假设你的业务表名称为product_dept,如果字段名包含空格,可根据你使用的数据库调整标识符包裹规则(MySQL用反引号、SQL Server用方括号、Oracle用双引号),符合要求的SQL如下:
SELECT DISTINCT pd1.Productid FROM product_dept pd1 -- 自关联筛选同时存在422和440部门编码的产品 INNER JOIN product_dept pd2 ON pd1.Productid = pd2.Productid AND pd1.`Dept cd` = 422 AND pd2.`Dept cd` = 440 -- 使用要求的NOT IN条件排除存在248部门编码的产品 WHERE pd1.Productid NOT IN ( SELECT DISTINCT Productid FROM product_dept WHERE `Dept cd` = 248 );
逻辑说明
- 自关联逻辑:通过同表关联筛选出同时对应部门编码422和440的所有Productid,初始筛选结果为123、1234、12
- NOT IN过滤逻辑:先查询出所有对应部门编码248的Productid(此处只有123),最终排除这部分产品后得到的结果就是1234、12,和预期结果一致。
内容的提问来源于stack exchange,提问作者user2885425
相关产品推荐
相关产品推荐

