如何使用子查询编写SELECT语句实现数据过滤
你的SQL有两处语法错误导致无法执行:
IN运算符后接子查询时必须用小括号包裹查询内容,你直接写in subquery不符合SQL语法规范- 子查询过滤条件里
some_field in (1,2,)末尾多了多余的逗号,多数数据库不支持这种尾随逗号的写法
修正后的写法如下,完全不需要用到JOIN:
WITH subquery AS ( SELECT DISTINCT id FROM a_table WHERE some_field IN (1,2) ) SELECT id FROM another_table WHERE id IN (SELECT id FROM subquery);
如果你使用的数据库支持 INTERSECT 运算符(PostgreSQL、Oracle、SQL Server等均支持),还可以直接用更简洁的交集写法,效果完全一致:
SELECT DISTINCT id FROM a_table WHERE some_field IN (1,2) INTERSECT SELECT id FROM another_table;
注:你提到两张表的id字段名不同,只需要把上面语句中对应表的字段名替换为实际名称即可,只要字段值为匹配的数值型就可以正常过滤。
内容的提问来源于stack exchange,提问作者Antonio Gamiz Delgado
相关产品推荐
相关产品推荐

