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

Redshift不支持IN/NOT IN查询,如何用NOT EXISTS改写?

Redshift IN/NOT IN查询报错的NOT EXISTS改写方案

针对Redshift抛出的[XX000] ERROR: This type of IN/NOT IN query is not supported yet in Redshift错误,完全可以将NOT IN部分改写为NOT EXISTS形式来规避。如果IN常量列表也触发问题,同样可以用EXISTS替代。

改写后的完整WHERE子句

WHERE ns.campaign_name IN ('LNG_CS_NA_AC',
                            'LNG_CS_NA_BIS',
                            'LNG_CS_NA_CANADA',
                            'LNG_CS_NA_EROD',
                            'LNG_CS_NA_InterAction',
                            'LNG_CS_NA_Interaction_UK',
                            'LNG_CS_NA_NFL',
                            'LNG_CS_NA_PDS',
                            'LNG_CS_NA_TECH',
                            'LNG_CS_NA_UK',
                            'LNG_CS_UK',
                            'LNG_CSAPAC_Asia',
                            'LNG_CSAPAC_AU_NZ_CS',
                            'LNG_CSAPAC_AU_NZ_ES',
                            'LNG_CSAPAC_AU_NZ_Helpline',
                            'LNG_CSAPAC_AU_NZ_SALES_ENABLEMENT',
                            'LNG_CSAPAC_AU_NZ_Tech_Sup',
                            'LNG_CSAPAC_AUNZ',
                            'LNG_CSAPAC_India_Gurugram',
                            'LNG_CSAPAC_Japan_Tokyo',
                            'LNG_CSAPAC_Korea_Seoul',
                            'LNG_CSUK',
                            'LNG_CSUK_MLEX',
                            'LNG_GOTC_UK',
                            'LNG_CS_EMEA_CS') -- 'LNG_APAC_Finance'
  AND ns.skill_name NOT LIKE 'cert%'
  AND NOT EXISTS (
    SELECT 1
    FROM (VALUES 
      ('APAC_FINANCE_MY'), 
      ('APAC_FINANCE_INDIA'), 
      ('APAC_FINANCE_SG')
    ) AS excluded_skills(skill)
    WHERE excluded_skills.skill = ns.skill_name
  )
  AND ns.contact_start_dts > '2019-12-31 23:59:59'

若IN列表也触发报错的替代写法

如果campaign_name的IN常量列表同样引发错误,可将其替换为EXISTS形式:

AND EXISTS (
  SELECT 1
  FROM (VALUES 
    ('LNG_CS_NA_AC'),
    ('LNG_CS_NA_BIS'),
    ('LNG_CS_NA_CANADA'),
    ('LNG_CS_NA_EROD'),
    ('LNG_CS_NA_InterAction'),
    ('LNG_CS_NA_Interaction_UK'),
    ('LNG_CS_NA_NFL'),
    ('LNG_CS_NA_PDS'),
    ('LNG_CS_NA_TECH'),
    ('LNG_CS_NA_UK'),
    ('LNG_CS_UK'),
    ('LNG_CSAPAC_Asia'),
    ('LNG_CSAPAC_AU_NZ_CS'),
    ('LNG_CSAPAC_AU_NZ_ES'),
    ('LNG_CSAPAC_AU_NZ_Helpline'),
    ('LNG_CSAPAC_AU_NZ_SALES_ENABLEMENT'),
    ('LNG_CSAPAC_AU_NZ_Tech_Sup'),
    ('LNG_CSAPAC_AUNZ'),
    ('LNG_CSAPAC_India_Gurugram'),
    ('LNG_CSAPAC_Japan_Tokyo'),
    ('LNG_CSAPAC_Korea_Seoul'),
    ('LNG_CSUK'),
    ('LNG_CSUK_MLEX'),
    ('LNG_GOTC_UK'),
    ('LNG_CS_EMEA_CS')
  ) AS target_campaigns(campaign)
  WHERE target_campaigns.campaign = ns.campaign_name
)

另一种替代方案:LEFT JOIN + IS NULL

除了NOT EXISTS,也可以用LEFT JOIN结合IS NULL的方式实现NOT IN的逻辑,效果一致:

-- 在FROM子句中添加LEFT JOIN
LEFT JOIN (VALUES 
  ('APAC_FINANCE_MY'), 
  ('APAC_FINANCE_INDIA'), 
  ('APAC_FINANCE_SG')
) AS excluded_skills(skill) ON excluded_skills.skill = ns.skill_name

-- 在WHERE子句中添加
AND excluded_skills.skill IS NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:40:38