我的模式如下:
CREATE TABLE rruser (
id NUMBER(32,0) NOT NULL,
name VARCHAR2(30) NOT NULL,
fullname VARCHAR2(100) NOT NULL,
active_flag CHAR(1) DEFAULT 'N' NOT NULL
)
CREATE TABLE rruser_group (
user_id NUMBER(32,0) NOT NULL,
group_id NUMBER(32,0) NOT NULL
)
CREATE TABLE rrgroup (
id NUMBER(32,0) NOT NULL,
name VARCHAR2(100) NOT NULL,
code VARCHAR2(20) NOT NULL
)
CREATE TABLE rrgroup_permission (
group_id NUMBER(32,0) NOT NULL,
permission_id NUMBER(32,0) NOT NULL
)
CREATE TABLE rrpermission (
id NUMBER(32,0) NOT NULL,
name VARCHAR2(100) NOT NULL,
description VARCHAR2(1000) NOT NULL
)
连接是通过表RRUSER_GROUP将RRUSER链接到RRGROUP 和RRGROUP通过表RRGROUP_PERMISSION进一步与RRPERMISSION链接。
我必须找出RRUSER中活动标志值等于'Y'的用户;我正在使用以下查询
SELECT * FROM rruser WHERE ACTIVE_FLAG = 'Y'
然后我必须找出具有写入权限的用户;在最后一个表RRPERMISSION中,有一个列NAME,它具有写权限,其中此列的值为'write'
。我可以使用什么查询来获取此信息?我知道应该使用INNER JOIN来实现。
现在,我已经尝试过查询特定用户,以了解他是否有写入权限,并且发现他有这样的写入权限......
SELECT count(ID) FROM rruser WHERE ACTIVE_FLAG = 'Y';
SELECT * FROM rruser WHERE ACTIVE_FLAG = 'Y' AND FULLNAME = 'sss'
SELECT * FROM rruser_group WHERE USER_ID = 1100
SELECT * FROM rrgroup WHERE ID = 113;
SELECT * FROM rrgroup_permission WHERE GROUP_ID = 189 ;
SELECT * FROM rrpermission WHERE ID = 990
答案 0 :(得分:1)
试试这个:
SELECT ru.* FROM rruser ru
inner join rruser_group rg ON ru.id = rg.user_id
inner join rrgroup_permission rgp ON rg.group_id = rgp.group_id
inner join rrpermission rp ON rgp.permission_id = rp.id WHERE ru.ACTIVE_FLAG='Y' AND rp.name='write'