SQL Server两表关联查询时如何补全缺失的业务职能审核记录?
实现方案
你原来的写法只能匹配审核表已有记录对应的职能,无法给每个审核条目补全全部业务职能行。要实现需求,你需要先生成所有审核条目ID和全量业务职能的笛卡尔积,再左关联审核表,对缺失的审核状态补默认值0即可,具体SQL如下:
SELECT i.itemId, f.funcId, ISNULL(r.reviewStatus, 0) AS reviewStatus, f.funcId, f.funcName FROM ( -- 获取所有存在的审核条目ID SELECT DISTINCT itemId FROM #review ) i -- 条目与全量职能做笛卡尔积,得到每个条目需要的全部职能行 CROSS JOIN #func f -- 左关联匹配对应审核记录 LEFT JOIN #review r ON i.itemId = r.itemId AND f.funcId = r.funcId ORDER BY i.itemId, f.funcId
如果使用MySQL环境,将代码中的ISNULL函数替换为IFNULL即可,逻辑完全通用。
内容的提问来源于stack exchange,提问作者beardedwonder6
相关产品推荐
相关产品推荐

