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

Oracle/SQL IN子句使用:如何用另一表列值作为筛选列表

解决CTE中ID筛选不生效的问题

你写的where ID in table1.ID之所以不生效,是因为IN操作符后面需要的是一个返回单列结果集的子查询,而不是直接引用另一个CTE的列名。下面给你两种可行的实现方式:

方法一:使用IN子查询

把table1的ID查询作为子查询放在IN后面,这样就能拿到table1所有ID的值来筛选table2:

WITH table1 AS (
    SELECT ... -- 你的table1查询逻辑,确保返回ID列
),
table2 AS (
    SELECT ... -- 你的table2需要查询的字段
    FROM 你的原始表名 -- 替换成table2对应的数据源表
    WHERE ID IN (SELECT ID FROM table1)
)
SELECT * FROM table2;

方法二:使用JOIN关联

如果后续需要用到table1的其他字段,用JOIN关联会更灵活,内连接会自动过滤出两边ID匹配的记录:

WITH table1 AS (
    SELECT ... -- 你的table1查询逻辑
),
table2 AS (
    SELECT t.* -- 按需选择字段,也可以指定具体列
    FROM 你的原始表名 t
    JOIN table1 ON t.ID = table1.ID
)
SELECT * FROM table2;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:52:00