例如,我有 3 个表:user
、group
和permission
,以及它们之间的两个 many2many 关系:user_groups
和group_permissions
。
我需要选择给定用户的所有权限,不重复。每次遇到类似的问题,我都无法确定哪个版本的查询更好:
SELECT permisson_id FROM group_permission WHERE EXISTS(
SELECT 1 FROM user_groups
WHERE user_groups.user_id = 42
AND user_groups.group_id = group_permission.group_id
)
SELECT DISTINCT permisson_id FROM group_permission
INNER JOIN user_groups ON user_groups.user_id = 42
AND user_groups.group_id = group_permission.group_id
我有足够的经验根据解释得出结论。第一个查询有子查询,但我的经验表明第一个查询更快。可能是因为结果中过滤了大量权限。
在这个情况下,你会怎么做?为什么?谢谢!