2011-10-27 42 views
0

我對我試圖執行的兩個數據庫有一個查詢。第一個表只是用戶信息,並由特權表引用。對於我的查詢,我試圖找到一組超級用戶,他們是在權限表中擁有當前所有權限的用戶。它被設置如下:選擇每種類型的用戶

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;