如何查询TEST表中同时拥有APP_ID=1和3的USER_ID?
找出同时关联APP_ID=1与APP_ID=3的USER_ID的SQL方案
这里提供几种实用的SQL写法来满足需求:
方法一:分组统计法
利用分组后统计不同APP_ID的数量,因为APP_ID仅存在1和3两个取值,所以当某个USER_ID的不同APP_ID数量为2时,说明它同时关联了两个APP_ID。
SELECT USER_ID FROM TEST WHERE APP_ID IN (1, 3) GROUP BY USER_ID HAVING COUNT(DISTINCT APP_ID) = 2;
方法二:自连接法
通过将表自连接,匹配同一个USER_ID下分别对应APP_ID=1和APP_ID=3的记录:
SELECT DISTINCT t1.USER_ID FROM TEST t1 JOIN TEST t2 ON t1.USER_ID = t2.USER_ID WHERE t1.APP_ID = 1 AND t2.APP_ID = 3;
方法三:子查询法
先筛选出关联APP_ID=3的USER_ID集合,再从中找出同时关联APP_ID=1的USER_ID:
SELECT USER_ID FROM TEST WHERE APP_ID = 1 AND USER_ID IN ( SELECT USER_ID FROM TEST WHERE APP_ID = 3 );
以上三种方法都能得到符合条件的USER_ID,可根据实际表数据量和数据库性能选择合适的写法。
内容的提问来源于stack exchange,提问作者raptor
相关产品推荐
相关产品推荐

