如何在WHERE子句中使用元组筛选与Table2匹配的Table1数据
使用元组IN条件筛选匹配Table2的Table1记录
你之前的查询返回全量数据是因为子查询的数据源错误——你从Table1本身获取(Project, Currency)组合,相当于让Table1的每条记录和自身的组合匹配,自然会返回所有数据。
正确的元组IN写法
直接从Table2中获取目标组合即可,SQL语句如下:
SELECT * FROM Table1 WHERE (Project, Currency) IN ( SELECT Project, Currency FROM Table2 )
可选优化:去重子查询结果
如果Table2中存在重复的(Project, Currency)组合,可以给子查询加上DISTINCT(不过IN子句会自动处理重复值,不加也不影响结果):
SELECT * FROM Table1 WHERE (Project, Currency) IN ( SELECT DISTINCT Project, Currency FROM Table2 )
和左连接写法的对比
你之前的左连接写法是从Table2出发关联Table1,最终结果和上述IN查询一致,但IN的写法更直接对应“从Table1筛选存在于Table2的组合”的需求,逻辑上更直观。
内容的提问来源于stack exchange,提问作者Oumayma El Jahrani
相关产品推荐
相关产品推荐

