2011-10-27 17 views
0

実行しようとしている2つのデータベースに対してクエリがあります。最初のテーブルはユーザ情報であり、特権テーブルによって参照されます。私の質問では、スーパーユーザーのセットを見つけようとしていますが、それらは特権テーブルにすべての現在の特権を持つユーザーです。すべてのタイプのユーザーを選択

create table MEMBER 
    ( id  int   not null, 
    name  varchar(10), 
    bdate  date, 
    sex  char, 
    pc_id  int   not null, 
    PRIMARY KEY (mid), 
    FOREIGN KEY (pc_id) REFERENCES PLEDGECLASS(id)) 

create table MEMBER_PRIVILEGE 
(mid  int   not null, 
    pid  int   not null, 
    PRIMARY KEY (mid,pid), 
    FOREIGN KEY (mid) REFERENCES MEMBER(id), 
    FOREIGN KEY (pid) REFERENCES PRIVILEGE(id)) 

create table PRIVILEGE 
(id  int, 
    pname varchar(15) 
    PRIMARY KEY(id)) 

は明らかに間違ったクエリが、私は次のように同等の何かをやろうとしている:

Select name 
From MEMBER,MEMBER_PRIVILEGE 
Where id=mid AND pid = ALL (select id 
          From PRIVILEGE); 

答えて

0
SELECT * 
FROM MEMBER 
WHERE NOT EXISTS (
    SELECT * 
    FROM MEMBER_PRIVILEGE LEFT JOIN PRIVILEGE ON MEMBER_PRIVILEGE.pid = PRIVILEGE.id) 
    WHERE MEMBER_PRIVILEGE.mid = MEMBER.id AND PRIVILEGE.id IS NULL 
) 
0

この::

Select name, (select count(id) from PRIVILIGE) as p_count 
    From MEMBER m 
    inner join MEMBER_PRIVILEGE mp on (m.id=mp.mid) 
    group by mp.mid having count(*) = p_count; 
を試してみてくださいそれは次のように設定されています
関連する問題