如何查询用户未加入的网络?基于多表数据校验
解决方案:获取用户未加入的网络列表
嘿,我来帮你搞定这个需求!要找出userID=9的用户没加入的网络,你可以用两种常见的SQL写法来实现,我都给你列出来:
方法一:LEFT JOIN + IS NULL
这种方法通过左连接关联两张表,筛选出没有匹配记录的网络:
$networks = $this->db->query(" SELECT n.companyname, n.description, n.commision FROM networks n LEFT JOIN usernetworks un ON n.id = un.networkid AND un.userID = '9' WHERE un.networkid IS NULL ");
逻辑解释:
LEFT JOIN会保留networks表的所有记录,同时匹配usernetworks中用户ID为9且networkid对应的记录- 当某个网络没有被用户9加入时,
un.networkid会是NULL,通过WHERE un.networkid IS NULL就能筛选出这些未加入的网络
方法二:NOT EXISTS子查询
这种方法逻辑更直观,直接检查当前网络是否存在于用户的已加入列表中:
$networks = $this->db->query(" SELECT companyname, description, commision FROM networks n WHERE NOT EXISTS ( SELECT 1 FROM usernetworks un WHERE un.networkid = n.id AND un.userID = '9' ) ");
逻辑解释:
- 子查询会检查当前
networks的id是否存在于usernetworks中(且用户ID为9) NOT EXISTS会筛选出那些子查询没有找到匹配记录的网络,也就是用户未加入的网络
额外小提示:
- 确保
networks.id和usernetworks.networkid的字段类型一致(比如都是INT),避免隐式类型转换拖慢查询 - 如果
userID是数字类型,建议把'9'改成9,去掉单引号更符合数据类型规范,也能优化查询效率
内容的提问来源于stack exchange,提问作者Scott O'connor
相关产品推荐
相关产品推荐

