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 がテーブル RRUSER_GROUP を介して 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
4

1 に答える 1

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'
于 2013-07-27T14:20:58.983 に答える