这是一个令人困惑的问题,为我写的这么裸露与我。SQL完全外部连接排除,选择非现有的行
我有3个表
section
id
name
permission
id
section_id
name
exclusion_permission
permission_id
查询如下:
SELECT
p.id AS permission_id,
p.name AS permission_name,
s.id AS section_id,
s.name AS section_name
FROM
section s
LEFT OUTER JOIN
permission p
ON
p.section_id = s.id
LEFT OUTER JOIN
exclusion_permission lep
ON
lep.permission_id = p.id
WHERE
lep.permission_id IS NULL
表数据是:
section
id name
1 admin
2 sales
3 moderator
4 intern
permission
id section_id name
1 1 root
2 2 sell
3 2 buy
4 3 edit_user
5 3 delete_user
查询将返回
1, root, 1, admin
2, sell, 2, sales
3, buy, 2, sales
4, edit_user, 3, moderator
5, delete_user, 3, moderator
,, 4, intern
现在,如果我把下面的排斥权限进入组合:
exclusion_permission
permission_id
1
5
查询将返回:
2, sell, 2, sales
3, buy, 2, sales
4, edit_user, 3, moderator
,, 4, intern
正如你所看到的,主持人段仍然存在,因为它有一个更与其关联的行。然而,管理部分被删除,因为与它相关联的唯一权限已被排除。我想要做的是让我的查询返回以下内容:
,, 1, admin
2, sell, 2, sales
3, buy, 2, sales
4, edit_user, 3, moderator
,, 4, intern
因此,如果该部分没有权限,请显示该部分。另外,如果某个部分的权限全部被排除,仍会显示没有相关权限的部分。
我该怎么做?由于
这没有给出预期的结果。 –