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

如何筛选数据库中无fid=1250行记录的id列表?

筛选不存在指定fid记录的id方法

需求:从以下数据表片段中,筛选出没有fid=1250行记录的id(示例中44294、44295符合要求):

id     fid              ts               val
44292   1243    2014-12-15 00:00:00.000   True
44292   1243    2017-02-02 00:00:00.000   False
44292   1250    2014-12-16 00:00:00.000   ABC
44293   1243    2014-12-15 00:00:00.000   True
44293   1243    2017-02-02 00:00:00.000   False
44293   1250    2014-12-16 00:00:00.000   KKK
44294   1243    2014-12-15 00:00:00.000   True
44294   1243    2017-02-02 00:00:00.000   False
44295   1243    2014-12-15 00:00:00.000   True
44295   1243    2017-02-02 00:00:00.000   False

下面提供几种可行的SQL实现方式:

方法1:NOT EXISTS子查询

这是最直观的写法,直接排除掉存在fid=1250记录的id:

SELECT DISTINCT id
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t2.id = t1.id
      AND t2.fid = 1250
);

DISTINCT用于去重,确保每个id只返回一次。

方法2:LEFT JOIN + IS NULL

通过左连接匹配目标记录,筛选未匹配成功的id:

SELECT DISTINCT t1.id
FROM your_table t1
LEFT JOIN your_table t2
    ON t1.id = t2.id
    AND t2.fid = 1250
WHERE t2.id IS NULL;

左连接后,没有对应fid=1250记录的行,t2的字段会是NULL,以此作为筛选条件。

方法3:GROUP BY + HAVING统计

按id分组后,统计每个id下fid=1250的行数,筛选行数为0的id:

SELECT id
FROM your_table
GROUP BY id
HAVING SUM(CASE WHEN fid = 1250 THEN 1 ELSE 0 END) = 0;

这种写法不需要额外去重,因为GROUP BY本身就会把id合并成唯一值。

以上三种方法在主流数据库(MySQL、PostgreSQL、SQL Server等)中都能正常运行,可根据实际表数据量和性能需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:01:11