如何编写SQL语句过滤已存在于好友表的登录表用户,避免重复添加
实现方案
你需要的是过滤Login表中ID存在于Friends表ID_User字段的记录,有3种常用的SQL实现方式,效果一致,可根据你的实际业务场景选择:
- 方案1:
NOT IN写法,逻辑最直观,适合小数据量场景
SELECT ID, Username, Password, Level FROM Login WHERE ID NOT IN (SELECT DISTINCT ID_User FROM Friends);
注:子查询加
DISTINCT是为了去重ID_User值,避免不必要的匹配校验,提升查询效率。
- 方案2:
NOT EXISTS写法,性能更优,适合大数据量场景,也能避免NOT IN遇到空值时返回结果为空的问题
SELECT l.ID, l.Username, l.Password, l.Level FROM Login l WHERE NOT EXISTS ( SELECT 1 FROM Friends f WHERE f.ID_User = l.ID );
- 方案3:左连接判空写法,兼容绝大多数数据库语法
SELECT l.ID, l.Username, l.Password, l.Level FROM Login l LEFT JOIN Friends f ON l.ID = f.ID_User WHERE f.ID_User IS NULL;
拿你提供的示例数据测试,上述SQL返回的结果只有ID为1的test用户,符合你展示可选好友列表、避免重复添加的需求。
内容的提问来源于stack exchange,提问作者William Hpf
相关产品推荐
相关产品推荐

