たとえば、3 つのテーブルがあります:user
とgroup
permission
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
説明に基づいて結論を出すのに十分な経験があります。最初のクエリにはサブクエリがありますが、私の経験では、最初のクエリの方が高速であることが示されています。おそらく、結果としてフィルタリングされたアクセス許可が多数になるためです。
この状況であなたはどうしますか?なんで?ありがとう!