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

Informix中如何通过rowid和first限制DELETE语句的删除行数

报错原因

你使用的数据库(语法特征判断为Informix)存在原生语法限制,不允许在IN子句的内层子查询中直接使用FIRST/LIMIT/SKIP类的行限制关键字,因此触发944错误。

可行解决方案

以下三种方案都可以绕过该限制,可根据你的数据库版本选择:

  • 方案1:临时表中转(兼容所有版本,最稳妥)
    先把待删除的rowid存入临时表,再基于临时表执行删除:

    -- 生成存储待删rowid的临时表
    SELECT FIRST 1000 rowid AS del_rowid INTO TEMP tmp_del_rows FROM table1 WHERE last_update < today-30;
    -- 执行删除
    DELETE FROM table1 WHERE rowid IN (SELECT del_rowid FROM tmp_del_rows);
    

    临时表会在当前会话结束后自动清理,无需手动删除。

  • 方案2:子查询套层绕过解析限制(兼容大部分中高版本)
    给带FIRST的子查询额外加一层派生表封装,让数据库解析器将其识别为普通结果集,即可正常用在IN子句中:

    DELETE FROM table1
    WHERE rowid IN (
        SELECT del_rowid FROM (
            SELECT FIRST 1000 rowid AS del_rowid FROM table1 WHERE last_update < today-30
        ) AS t
    );
    
  • 方案3:DELETE直接加行限制(11.70及以上版本可用,写法最简洁)
    高版本Informix支持直接在DELETE语句中加FIRST关键字控制删除行数,不需要写子查询:

    DELETE FIRST 1000 FROM table1 WHERE last_update < today-30;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:15:04