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

