PostgreSQL查询:无关联记录时返回主表全量数据并设默认值
解决权限查询默认值问题
要实现返回表1所有权限,同时匹配表2中指定用户的权限状态(无记录时默认false),核心是用**左连接(LEFT JOIN)**保留表1的全部数据,再用函数处理默认值:
直接用下面的SQL语句即可:
SELECT p.permission_id, p.permission, COALESCE(s.is_allowed, false) AS is_allowed FROM 表1 p LEFT JOIN 表2 s ON p.permission_id = s.permission_id AND s.user_id = 282;
为什么之前的尝试不对?
你之前加WHERE s.is_allowed IS NULL的问题在于:左连接后,表2无匹配的记录会返回NULL,但这个WHERE条件会把表2有匹配的记录全部过滤掉,最终只能拿到表1中表2完全没记录的权限,不符合你要返回所有权限的需求。
正确的逻辑是:用LEFT JOIN让表1的所有数据都保留,然后通过COALESCE函数把表2中不存在的is_allowed值替换成false,这样不管表2有没有该用户的记录,表1的所有权限都会被返回,同时正确显示权限状态。
内容的提问来源于stack exchange,提问作者Md. Parvez Alam
相关产品推荐
相关产品推荐

