Niestety, musisz dwukrotnie wykonać dwa najwyższe zapytania, aby usunąć je z dolnego zapytania:
SELECT p.*, 1 as enabled
FROM member_permissions mp
JOIN permissions p ON p.permission_id = mp.permission_id
WHERE member_id = 1
UNION
SELECT pgp.*, 1 as enabled
FROM member_permissions mp
JOIN permission_link pl ON pl.permission_group_id = mp.permission_group_id
JOIN permissions pgp ON pgp.permission_id = pl.permission_id
WHERE member_id = 1
UNION
SELECT *, 0 as enabled
FROM permissions p where p.permission_id not in (
SELECT p.permission_id
FROM member_permissions mp
JOIN permissions p ON p.permission_id = mp.permission_id
WHERE member_id = 1
UNION ALL
SELECT pgp.permission_id
FROM member_permissions mp
JOIN permission_link pl ON pl.permission_group_id = mp.permission_group_id
JOIN permissions pgp ON pgp.permission_id = pl.permission_id
WHERE member_id = 1
)