如何为指定ID补充另一表中缺失的权限?
问题说明
- 表1:存储全量权限信息
- 表2:用于为用户ID分配对应权限
- 核心需求:查询指定ID(例如ID=2)尚未分配的表1权限,完成权限补全(比如需为ID=2补充权限3)
原SQL的逻辑缺陷
之前执行的查询语句:
SELECT tb1.Desc FROM table1 tb1 LEFT OUTER JOIN table2 tb2 ON tb1.Desc = tb2.Desc WHERE tb2.Desc IS NULL
这段SQL仅检查整个表2中不存在的权限,而非针对指定ID的缺失权限。举例来说,权限3已分配给ID=1时,该SQL会判定权限3已存在,不会将其识别为ID=2的缺失权限,无法达成需求。
正确的查询方案
要精准定位指定ID的缺失权限,需在查询逻辑中明确限定目标ID,以下两种方式均可实现:
方式1:JOIN阶段关联目标ID
SELECT tb1.Desc FROM table1 tb1 LEFT JOIN table2 tb2 ON tb1.Desc = tb2.Desc AND tb2.ID = 2 -- 仅关联目标ID的权限记录 WHERE tb2.ID IS NULL -- 筛选未匹配到该ID的权限
方式2:使用NOT EXISTS子查询
SELECT tb1.Desc FROM table1 tb1 WHERE NOT EXISTS ( SELECT 1 FROM table2 tb2 WHERE tb2.Desc = tb1.Desc AND tb2.ID = 2 )
上述两种写法都能准确找出指定ID未分配的表1权限,解决原SQL的逻辑问题。
内容的提问来源于stack exchange,提问作者Kyle Westran
相关产品推荐
相关产品推荐

