如何使用SQL子查询查找不存在指定account_id关联的user_id
可实现的SQL写法有以下几种,都能得到你要的结果:
方法1:NOT IN 子查询(逻辑最贴合需求描述,好理解)
先查出所有和指定account_id绑定的user_id,再过滤不在这个集合内的用户ID,加DISTINCT避免返回重复的用户ID:
SELECT DISTINCT user_id FROM Accounts_Users WHERE user_id NOT IN ( -- 子查询拿到所有和指定account_id关联的user_id SELECT user_id FROM Accounts_Users WHERE account_id = 2 );
方法2:NOT EXISTS 关联子查询(生产环境更推荐,性能更优,也能避免NOT IN遇空值返回异常的坑)
SELECT DISTINCT t1.user_id FROM Accounts_Users t1 WHERE NOT EXISTS ( SELECT 1 FROM Accounts_Users t2 WHERE t2.account_id = 2 AND t2.user_id = t1.user_id );
方法3:LEFT JOIN + 空值过滤
SELECT DISTINCT t1.user_id FROM Accounts_Users t1 LEFT JOIN Accounts_Users t2 ON t2.user_id = t1.user_id AND t2.account_id = 2 WHERE t2.user_id IS NULL;
你可以根据自己的业务场景和数据量选择合适的写法,三种写法在你的示例数据下返回的结果都和预期一致。
内容的提问来源于stack exchange,提问作者Eli Zatlawy
相关产品推荐
相关产品推荐

