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

如何在Redshift SQL中过滤掉ID匹配其他行ID1/ID2的数据行?

在Redshift SQL中实现过滤被引用行的需求

刚好之前在项目里碰到过类似的场景,要过滤掉那些ID被其他行的ID1或ID2引用的数据行,核心思路就是先找出所有被引用的ID集合,再筛选原表中不在这个集合里的记录。下面给你两种适配Redshift特性的可行实现方式:

方法1:CTE + NOT IN(逻辑清晰易读)

先通过CTE收集所有出现在ID1或ID2里的非空ID,再用NOT IN过滤原表数据,逻辑一目了然:

WITH referenced_ids AS (
    -- 收集ID1中的有效引用ID
    SELECT ID1 AS ref_id FROM your_table WHERE ID1 IS NOT NULL
    UNION
    -- 收集ID2中的有效引用ID,用UNION自动去重
    SELECT ID2 AS ref_id FROM your_table WHERE ID2 IS NOT NULL
)
SELECT t.*
FROM your_table t
WHERE t.ID NOT IN (SELECT ref_id FROM referenced_ids);

方法2:NOT EXISTS(大数据量更高效)

如果你的表数据量较大,Redshift对NOT EXISTS的查询优化表现更好,而且不需要额外的CTE,执行效率更高:

SELECT t.*
FROM your_table t
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table ref
    -- 检查当前行ID是否被其他行的ID1或ID2引用
    WHERE ref.ID1 = t.ID OR ref.ID2 = t.ID
);

适配你的测试数据验证

用上面两种方法跑你提供的示例数据,都会得到你期望的结果:

ID | ID1 | ID2
D | B | C
E | |

需要注意:如果ID1或ID2存在空值,两种方法都会自动忽略这些空值(毕竟空值不会指向任何有效ID),完全符合业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:52:46