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
相关产品推荐
相关产品推荐

