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

Redshift MERGE语句未用LIMIT却报LIMIT语法错误求助

问题分析与解决

你的报错看似和LIMIT有关,但实际是Redshift MERGE语法的规范问题:Redshift要求WHEN NOT matched THEN INSERT子句必须显式指定目标表的列名列表,不能直接跟VALUES子句。你的代码里省略了列列表,导致SQL解析器无法正确解析语句,从而抛出了误导性的语法错误。

修正方案

在INSERT关键字后添加目标表dim_containers的列名列表,列的顺序要和VALUES里的字段一一对应。

修正后的完整代码

MERGE INTO dim_containers trgt
USING (SELECT s.ip_container_id,
              s.name,
              s.created_by,
              s.creation_date,
              s.last_update_date,
              s.last_updated_by,
              decode(s.tp,'C', 'CONTAINER',
                          'T', 'TRAY',
                          s.tp) container_type
       FROM   TBL_CONTAINER_TYPES     s) src
ON (src.ip_container_id = dim_containers.ip_container_id)
WHEN matched THEN UPDATE SET
   description            = src.NAME,
   container_type         = src.container_type,
   created_by             = src.created_by,
   creation_date          = src.creation_date,
   last_update_date       = src.last_update_date,
   last_updated_by        = src.last_updated_by,
   local_last_update_date = lv_sysdate,
   local_last_updated_by  = lc_user
WHEN NOT matched THEN INSERT (
    -- 请根据dim_containers表实际列名调整,顺序与VALUES对应
    container_id,
    description,
    container_type,
    creation_date,
    created_by,
    last_update_date,
    last_updated_by,
    ip_container_id,
    local_last_update_date,
    local_last_updated_by
)
VALUES
 ((CASE WHEN src.ip_container_id = -1
           THEN 0
        WHEN src.ip_container_id = -2
           THEN 1
        ELSE scty_seq.NEXTVAL
   END),
   src.NAME,
   src.container_type,
   src.creation_date,
   src.created_by,
   src.last_update_date,
   src.last_updated_by,
   src.ip_container_id,
   lv_sysdate,
   lc_user);

注意:请根据dim_containers表的实际列名调整上面的列列表,确保和VALUES中的字段顺序完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:05:24