如何实现含「全部类型」的表关联查询:特定用户类型返回全量记录
带「全部类型」逻辑的关联查询解决方案
修改后的SQL查询语句
SELECT r.* FROM record r JOIN user u ON u.id = :userId WHERE u.type_id = 3 OR r.type_id = u.type_id;
逻辑说明
- 先通过
JOIN user u ON u.id = :userId定位到目标用户,获取其type_id - 利用
OR实现分支判断:- 当用户
type_id为3时,直接返回所有record记录 - 当用户
type_id为1或2时,仅返回record中type_id与用户匹配的记录
- 当用户
场景验证
对应需求中的三个测试场景:
- 用户ID=1:用户
type_id=1,返回record中type_id=1的记录(ID1、2),符合预期 - 用户ID=3:用户
type_id=2,返回record中type_id=2的记录(ID3),符合预期 - 用户ID=2:用户
type_id=3,返回所有record记录(ID1、2、3),符合预期
扩展写法(含类型描述)
如果需要同时返回类型表的描述信息,可调整为:
SELECT r.id AS record_id, t.type_desc, u.id AS user_id FROM record r JOIN type t ON r.type_id = t.id JOIN user u ON u.id = :userId WHERE u.type_id = 3 OR r.type_id = u.type_id;
内容的提问来源于stack exchange,提问作者Francis Deible
相关产品推荐
相关产品推荐

