修改SQL查询:替换权限条件为关联授权表的活跃状态筛选用户
完善关联auths表的活跃用户查询SQL
没问题,我来帮你搞定这个查询需求!根据你的描述,现在需要把原来依赖permissions字段的判定逻辑,改成检查用户自身活跃,或者关联的auths记录中有活跃状态的。这里给你两种靠谱的实现方案:
方案一:LEFT JOIN + DISTINCT
这种方式用左连接保留所有用户,再通过去重避免重复结果:
SELECT DISTINCT users.* FROM users LEFT JOIN auths ON auths.user_id = users.id WHERE users.active = 1 OR auths.active = 1;
LEFT JOIN确保不管用户有没有对应的auths记录,都能被纳入查询范围DISTINCT用来避免同一个用户因为有多条活跃的auths记录而被重复返回WHERE条件直接覆盖两种活跃判定:用户自身活跃,或者关联的auths记录活跃
方案二:EXISTS子查询(推荐)
如果你的auths表数据量比较大,这种方式通常效率更高,因为它不需要处理连接后的重复数据:
SELECT users.* FROM users WHERE users.active = 1 OR EXISTS ( SELECT 1 FROM auths WHERE auths.user_id = users.id AND auths.active = 1 );
EXISTS子查询会快速检查当前用户是否存在至少一条活跃的auths记录,只要找到符合条件的就会停止查询,性能更优- 逻辑上和方案一完全一致,但避免了JOIN操作可能带来的重复数据问题
两种方案都能满足你的需求:当用户自身活跃,或者有活跃的auths关联记录时,就会被判定为活跃用户,完全不再依赖permissions字段啦。
内容的提问来源于stack exchange,提问作者Hommer Smith
相关产品推荐
相关产品推荐

