2013-07-27 3 views
0

У меня есть схема, как на ниже:Восстановите записи через внутреннее соединение

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 связан с RRGROUP с помощью таблицы RRUSER_GROUP и RRGROUP дополнительно связан с RRPERMISSION через стол RRGROUP_PERMISSION.

Я должен узнать пользователей, значение активного флага которых равно «Y» в RRUSER; Я использую нижеследующий запрос

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

Прежде всего, для соединения запроса обе таблицы должны иметь отношение. здесь в вашем случае идентификатор таблицы rruser должен быть вставлен в rrpermission. –

+0

Dh, пожалуйста, предложите запрос, по которому я могу получить пользователей, у которых есть права на запись, я показал выше, что таблицы связаны друг с другом –

+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' 
+0

Спасибо, что много работает, спасибо, много, должен это оценить. –

Смежные вопросы