【发布时间】:2020-09-16 18:00:42
【问题描述】:
我有以下表格,USER 和 RECORDS。 USER 表只包含用户名和他们有权访问的组。如果用户的组为 null(例如 BOB),则表示他们是超级用户并且可以访问所有组。
用户:
username | group
---------|--------
Bob | (null)
Kevin | 1
John | 2
Mary | 1
然后我有一个包含记录列表的RECORDS 表:
record | field_name | value
----------------------------
1 AGE 92
1 HEIGHT 9'2
1 __GROUP__ 1
2 AGE 11
2 HEIGHT 1'1
2 __GROUP__ 2
3 AGE 68
3 HEIGHT 6'8
这不是我的设计,但这是我必须查询的。在RECORDS 表中,记录所属的组由field_name 列中的__GROUP__ 值指示。所以我要做的是获取每个用户可以访问的所有记录的列表。
所以基于用户表:
-
BOB 可以访问所有记录
-
KEVIN 和 MARY 只能访问具有 field_name = 的记录 '__ GROUP __' 和值 = 1
-
JOHN 只能访问具有 field_name = '__ GROUP __' 的记录 和值 = 2
这意味着
- BOB 有权访问记录 1、2 和 3。
- Kevin 只能访问记录 1
- Mary 只能访问记录 1
- John 只能访问记录 2
如果记录中缺少 GROUP,则意味着只有超级用户(group = null 的用户)可以访问它。
我知道如果在 RECORDS 表中它会有一个“GROUP”列,这会更容易,但不幸的是,这不是我的数据库,我无法更改结构。
**抱歉,我忘了提到一个用户可以在多个组中!例如,玛丽可能属于第 1 组和第 2 组。
【问题讨论】:
-
好吧,你能告诉我们你到目前为止尝试过的代码吗?
标签: mysql sql subquery having-clause sql-null