回 帖 发 新 帖 刷新版面

主题:[讨论]请教跨三个表的查询语句,结果排除子集

现有三个表,R , C , Y 
 R 表有字段 RID , RFLAG.
 C 表有字段 RID , CUSER , CNAME .   RID为主键。
 Y 表有字段 YID , CUSER .
 

请教,给一个 YID ,
如何求一 C.CUSER,
满足
select C.CUSER form C , R where R.RFLAG = 1 
             and R.RID = C.RID 
的结果,排除C.RID=以下记录
select  C.RID form C , Y  where  Y.YID=给定YID  and  Y.CUSER = C.CUSER
的结果,有什么好的方法么。
我试过
select C.CUSER form C , R where R.RFLAG = 1 
             and R.RID = C.RID 
             and C.RID not (select  C.RID 
                form C , Y  
                where  Y.YID=给定YID  and  Y.CUSER = C.CUSER)
过不去。
请指教。

回复列表 (共4个回复)

沙发

可以通过三表连接来实现:
select c.user from c,r,y
where r.rid=c.rid and y.cuser!=c.cuser and r.rflag=1 and y.yid!=给定yid;

板凳

不好意思,上面写错了,C表中RID不是主键。

 Y 表中,YID 不是唯一的,一个 YID 对应多个CUSER,
 C 表中,一个 RID 对应多个 CUSER,
 R 表中,RID  为主键。

当YID取值时,要求这个 CUSER 是满足,在 Y 表中,
如果已有一个 YID 的 CUSER 取值 在 C 表中 对应的 RID ,
则, CUSER 不能是在 C 表中 这个 RID 下的 CUSER .

3 楼

SELECT        C.CUSER
FROM          R, Y
WHERE         R.RID *= YID
INNER JOIN    C
ON            YID <> C.RID
AND           Y.CUSER = C.CUSER

4 楼

select  C.RID form C , Y  
       where  Y.YID=给定YID  
       and  Y.CUSER = C.CUSER 
       and C.CUSER in 
        (select C.CUSER form C , R where R.RFLAG = 1 
              and R.RID = C.RID)
试试这个看看行不
不知道有没有错
我好久都没弄个这东西了

我来回复

您尚未登录,请登录后再回复。点此登录或注册