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

PostgreSQL:筛选不含指定field_name值的唯一some_id

解决方法:筛选无指定field_name值的唯一some_id

嘿,这个问题其实有好几种实用的SQL解法,我给你一一拆解:

方法1:使用NOT IN子查询

这是最直观的思路——先找出所有包含目标field_name(比如kevin)的some_id,再从总列表里排除这些id。

SELECT DISTINCT some_id
FROM your_table_name
WHERE some_id NOT IN (
    SELECT some_id
    FROM your_table_name
    WHERE field_name = 'kevin'
);

逻辑说明:子查询先抓取所有关联kevin的some_id(这里就是201),外层查询再筛选不在这个集合里的唯一some_id,最终得到200和203。

方法2:LEFT JOIN + IS NULL

用左连接的方式,把原表和含目标值的子表关联,然后筛选出匹配不到的记录(也就是没有目标值的some_id)。

SELECT DISTINCT t1.some_id
FROM your_table_name t1
LEFT JOIN (
    SELECT some_id
    FROM your_table_name
    WHERE field_name = 'kevin'
) t2 ON t1.some_id = t2.some_id
WHERE t2.some_id IS NULL;

逻辑说明:左连接后,t2.some_id为NULL的行,就对应那些完全没有kevin的some_id,去重后就是你要的结果。

方法3:GROUP BY + HAVING

按some_id分组,直接统计分组内是否存在目标field_name,过滤掉存在的分组。

SELECT some_id
FROM your_table_name
GROUP BY some_id
HAVING COUNT(CASE WHEN field_name = 'kevin' THEN 1 END) = 0;

逻辑说明:CASE语句会给每个分组里等于kevin的行计数,如果计数为0,说明这个some_id下完全没有kevin,直接符合筛选条件。这种方法不需要子查询,代码更紧凑。

注意:把代码里的'kevin'换成你需要排除的任意field_name值即可,这几种方法在MySQL、PostgreSQL、SQL Server等主流数据库都能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:47:15