2011-10-27 40 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;