如何筛选同时出现在同一表两个SQL查询结果中的id?
筛选同时满足两个条件的ID的SQL实现方法
以下是几种实用的实现方式,都能得到你需要的ID(102、110、140):
方法1:使用INTERSECT取交集
INTERSECT关键字专门用于获取两个查询结果的交集,写法最直观:
SELECT id FROM sval WHERE fid = 994 AND val = 'XLON' INTERSECT SELECT id FROM sval WHERE fid = 900 AND val = 'Equity';
方法2:使用IN子查询
把第二个查询的结果作为筛选条件,直接在第一个查询里匹配ID:
SELECT id FROM sval WHERE fid = 994 AND val = 'XLON' AND id IN ( SELECT id FROM sval WHERE fid = 900 AND val = 'Equity' );
方法3:使用JOIN连接结果
将两个查询的结果作为临时表进行内连接,只保留ID相同的记录:
SELECT t1.id FROM (SELECT id FROM sval WHERE fid = 994 AND val = 'XLON') t1 JOIN (SELECT id FROM sval WHERE fid = 900 AND val = 'Equity') t2 ON t1.id = t2.id;
方法4:使用GROUP BY + HAVING统计匹配次数
直接在原表中筛选出同时满足两个条件的ID,通过统计每个ID符合条件的次数来判断:
SELECT id FROM sval WHERE (fid = 994 AND val = 'XLON') OR (fid = 900 AND val = 'Equity') GROUP BY id HAVING COUNT(DISTINCT fid) = 2;
注:如果同一个ID在同一条件下可能出现多条记录,用
COUNT(DISTINCT fid)确保是两个不同的条件都匹配;要是每个条件下每个ID只会出现一次,直接用COUNT(*) = 2也可以。
内容的提问来源于stack exchange,提问作者jikf
相关产品推荐
相关产品推荐

