当右表中存在 NULL 时返回左表中的所有结果,当右表中不存在空时返回内连接的结果

詹姆斯·拉克斯顿

嗨,只是想知道这种情况是否可能?

我有两个表和一个关系表来创建两个表之间的多对多关系。请参阅下表以获取简单表示;

| Security ID   | Security Group |
| 1             | Admin          |
| 2             | Basic          |

| Security ID   | Access ID      |
| 1             | NULL           |
| 2             | 1              |

| Function ID   | Function Code  |
| 1             | Search         | 
| 2             | Delete         |

我想要实现的是在检查关系表时我想返回安全组上的用户有权访问的所有功能。如果将用户分配到关系表中包含 NULL 值的安全组,则授予他们对所有功能的访问权限。

例如,“基本”安全组中的用户可以访问搜索功能,而“管理员”安全组中的用户应该可以访问搜索和删除功能。

以这种方式设置的原因是因为用户可以拥有 0 到多个安全组,并且功能列表非常大,需要使用您可以访问的功能白名单,而不是您可以访问的功能黑名单列表”访问。

感谢您的时间。

丹尼斯·鲁巴什金

您的表格示例:

CREATE TABLE #G
(
    Security_ID INT,
    Security_Group      VARCHAR(32)
)

INSERT INTO #G
VALUES (1, 'Admin'), (2, 'Basic')

CREATE TABLE #A
(
    Security_ID INT,
    Access_ID   INT
)

INSERT INTO #A
VALUES (1, NULL), (2, 1)

CREATE TABLE #F
(
    Function_ID INT,
    Function_CODE   VARCHAR(32)
)

INSERT INTO #F
VALUES (1, 'Search'), (2, 'Delete')

询问:

SELECT #G.Security_Group, #F.Function_CODE
FROM #G 
    JOIN #A ON #G.Security_ID = #A.Security_ID
    JOIN #F ON #F.Function_ID = #A.Access_ID OR #A.Access_ID IS NULL

删除示例表:

DROP TABLE #G
DROP TABLE #A
DROP TABLE #F

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mysql链接表,如果连接表中不存在,则返回null

来自分类Dev

如何从一个表中选择另一个表中不存在的所有记录,但在不存在的记录中返回NULL

来自分类Dev

带有右表的where子句的左连接(必须从右返回NULL)-Oracle

来自分类Dev

带有右表的where子句的左连接(必须从右返回NULL)-Oracle

来自分类Dev

当键不存在时,哈希表返回null或引发异常?

来自分类Dev

返回表中的所有字段或返回一个查询中不存在的字段

来自分类Dev

返回表中不存在但IN列表中存在的值?

来自分类Dev

SQL包含相关表中不存在id的结果

来自分类Dev

当表中不存在数据时,如何不返回值 0,SQLPLUS

来自分类Dev

如何从右表中找不到的左表返回行?

来自分类Dev

返回记录,即使它们在联接表中不存在

来自分类Dev

当匹配的数据在表中时,Join 返回 NULL

来自分类Dev

左连接与右表中的位置

来自分类Dev

Mysql左连接,条件在右表中

来自分类Dev

SQL 左连接 - 右表中的多行

来自分类Dev

当记录不存在时插入到表中

来自分类Dev

MySQL中的子查询,如果存在则检索最大日期,如果不存在则返回NULL

来自分类Dev

MySQL中的子查询,如果存在则检索最大日期,如果不存在则返回NULL

来自分类Dev

为所有人返回不在事件表中的操作项 - 不存在的复杂选择

来自分类Dev

MySQL-连接-在其他表中不存在时显示数据

来自分类Dev

联接中不存在NULL

来自分类Dev

仅当表 B 中不存在特定值时才从表 A 中获取值

来自分类Dev

获取表中不存在的值?

来自分类Dev

选择表中不存在的ID

来自分类Dev

选择表中不存在的ID

来自分类Dev

更新表中不存在的记录

来自分类Dev

表中不存在的行

来自分类Dev

检索表中不存在的行

来自分类Dev

获取表中不存在的行

Related 相关文章

  1. 1

    mysql链接表,如果连接表中不存在,则返回null

  2. 2

    如何从一个表中选择另一个表中不存在的所有记录,但在不存在的记录中返回NULL

  3. 3

    带有右表的where子句的左连接(必须从右返回NULL)-Oracle

  4. 4

    带有右表的where子句的左连接(必须从右返回NULL)-Oracle

  5. 5

    当键不存在时,哈希表返回null或引发异常?

  6. 6

    返回表中的所有字段或返回一个查询中不存在的字段

  7. 7

    返回表中不存在但IN列表中存在的值?

  8. 8

    SQL包含相关表中不存在id的结果

  9. 9

    当表中不存在数据时,如何不返回值 0,SQLPLUS

  10. 10

    如何从右表中找不到的左表返回行?

  11. 11

    返回记录,即使它们在联接表中不存在

  12. 12

    当匹配的数据在表中时,Join 返回 NULL

  13. 13

    左连接与右表中的位置

  14. 14

    Mysql左连接,条件在右表中

  15. 15

    SQL 左连接 - 右表中的多行

  16. 16

    当记录不存在时插入到表中

  17. 17

    MySQL中的子查询,如果存在则检索最大日期,如果不存在则返回NULL

  18. 18

    MySQL中的子查询,如果存在则检索最大日期,如果不存在则返回NULL

  19. 19

    为所有人返回不在事件表中的操作项 - 不存在的复杂选择

  20. 20

    MySQL-连接-在其他表中不存在时显示数据

  21. 21

    联接中不存在NULL

  22. 22

    仅当表 B 中不存在特定值时才从表 A 中获取值

  23. 23

    获取表中不存在的值?

  24. 24

    选择表中不存在的ID

  25. 25

    选择表中不存在的ID

  26. 26

    更新表中不存在的记录

  27. 27

    表中不存在的行

  28. 28

    检索表中不存在的行

  29. 29

    获取表中不存在的行

热门标签

归档