You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL筛选仅含PSC阶段运输编码的ANY运算符使用问题

问题原因分析

你原来的查询逻辑错误在于<> ANY(...)的语义:只要某行的tcs_stages_code不等于列表里的任意一个值,就会返回该行,最终会把所有存在PSC阶段的运输编码都返回,完全没有过滤掉同时存在其他阶段的编码。

可行解决方案

方案1:使用GROUP BY + 聚合过滤(最直观)

按运输编码分组,统计该编码下非PSC阶段的数量,如果为0则符合要求:

SELECT tcs_transportation_code
FROM (
  -- 这里替换为你获取原始数据的查询语句
  'QUERY TO GET THE DATA SHOWN HERE'
) AS old_query
GROUP BY tcs_transportation_code
-- 非PSC阶段的数量为0,说明所有阶段都是PSC
HAVING COUNT(*) FILTER (WHERE tcs_stages_code <> 'PSC') = 0;

如果你用的PostgreSQL版本支持布尔聚合,也可以用更简洁的写法:

SELECT tcs_transportation_code
FROM (
  'QUERY TO GET THE DATA SHOWN HERE'
) AS old_query
GROUP BY tcs_transportation_code
HAVING bool_and(tcs_stages_code = 'PSC');

方案2:使用EXCEPT集合运算

先查所有存在PSC阶段的运输编码,再减去所有存在其他阶段的运输编码,剩下的就是仅含PSC的编码:

SELECT tcs_transportation_code FROM old_query WHERE tcs_stages_code = 'PSC'
EXCEPT
SELECT tcs_transportation_code FROM old_query WHERE tcs_stages_code <> 'PSC';

补充说明

你提供的示例数据中所有运输编码都存在PSC之外的其他阶段,所以执行上述查询返回的结果为空。


内容的提问来源于stack exchange,提问作者Archana Kumari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:54:02