对于每个aId: x 找对应的b中记录: SELECT bId INTO y FROM a WHERE aId = x; 然后 SELECT * FROM b WHERE bId = y; 即可得到对应的b表中记录 找对应于x的最大的cId SELECT max(cId) FROM c WHERE aId = x;
SQL> select * from testa; AID ANAME BID ---------- ---------- ---------- 11 aa 1 12 aaa 1 13 aaaa 2 14 aaaaa 2SQL> select * from testb; BID BNAME ---------- ---------- 1 bb 2 bbbSQL> select * from testc; CID CNAME AID ---------- ---------- ---------- 111 cc 11 112 ccc 11 113 cccc 12SQL> select a.aID,a.aName,b.bId,b.bName,c.cId,c.cName from testa a, 2 testb b,testc c 3 where a.aId=11 and a.bID=b.bID and 4 c.cid=(select max(cid) from testc where aid=11); AID ANAME BID BNAME CID CNAME ---------- ---------- ---------- ---------- ---------- ---------- 11 aa 1 bb 112 cccSQL>
试试: select x.*,y.max_cId from (select aId,a.aName,a.bId from a,b where a.aId=b.aId) x, (select aId,max(cId) max_cId from c group aId) y where x.aId=y.aId(+)
waterfirer(水清): 你好,谢谢你这么认真的对待这儿问题.虽然你的结果不是我所要的,但是我还是很感谢你的关心!万分感谢!因为a表中的aId我压根就不知道它是多少,所以我无法给这个语句里输入我的条件(aId),而且,我是需要所有只要关联的数据信息!谢谢你!licsth() : 你好,谢谢你的关注!首先,我想纠正一下你的错误,在b表没有aId,所以"x"应该是"select aId,a.aName,a.bId from a,b where a.bId=b.bId".现在我执行了一下,结果大部分是我想要的,你不应该要后边的那个"(+)",如果c表里没有和a表相对应的记录,那么就不用显示了!所以我把你的语句改后的结果是: select x.*,y.auditId from (select b.projectId,b.projectName,a.docId,a.docName from t_doc a,t_project b where a.projectId=b.projectId) x,(select max(docAuditId) auditId,docId from t_docAudit group by docId) y where x.docId=y.docId; 真的很感谢大家! 昨天,我的一位美女妹妹(薄荷)最后给我想到了一条语句,我拿出来与大家共同分享,它是这样的: select a.docId,a.docName,b.projectId,b.projectName,c.docAuditId,c.auditor from t_doc a,t_project b,t_docAudit c,(select docId,max(docAuditId) as docAuditId from t_docAudit group by docId) d where b.projectId=a.projectId and c.docId=a.docId and c.docauditId=d.docauditId and c.docId=d.docId; 在此,我感谢我可爱的薄荷,我简直是爱死你了!薄荷! 同时,我也感谢所有给我帮助和回复的兄弟姐妹们!谢谢!(*^__^*)
---------- ---------- ----------
11 aa 1
12 aaa 1
13 aaaa 2
14 aaaaa 2SQL> select * from testb; BID BNAME
---------- ----------
1 bb
2 bbbSQL> select * from testc; CID CNAME AID
---------- ---------- ----------
111 cc 11
112 ccc 11
113 cccc 12SQL> select a.aID,a.aName,b.bId,b.bName,c.cId,c.cName from testa a,
2 testb b,testc c
3 where a.aId=11 and a.bID=b.bID and
4 c.cid=(select max(cid) from testc where aid=11); AID ANAME BID BNAME CID CNAME
---------- ---------- ---------- ---------- ---------- ----------
11 aa 1 bb 112 cccSQL>
select x.*,y.max_cId
from
(select aId,a.aName,a.bId from a,b
where a.aId=b.aId) x,
(select aId,max(cId) max_cId from c group aId) y
where x.aId=y.aId(+)
你好,谢谢你这么认真的对待这儿问题.虽然你的结果不是我所要的,但是我还是很感谢你的关心!万分感谢!因为a表中的aId我压根就不知道它是多少,所以我无法给这个语句里输入我的条件(aId),而且,我是需要所有只要关联的数据信息!谢谢你!licsth() :
你好,谢谢你的关注!首先,我想纠正一下你的错误,在b表没有aId,所以"x"应该是"select aId,a.aName,a.bId from a,b where a.bId=b.bId".现在我执行了一下,结果大部分是我想要的,你不应该要后边的那个"(+)",如果c表里没有和a表相对应的记录,那么就不用显示了!所以我把你的语句改后的结果是:
select x.*,y.auditId from (select b.projectId,b.projectName,a.docId,a.docName
from t_doc a,t_project b where a.projectId=b.projectId) x,(select max(docAuditId) auditId,docId from t_docAudit group by docId) y where x.docId=y.docId;
真的很感谢大家!
昨天,我的一位美女妹妹(薄荷)最后给我想到了一条语句,我拿出来与大家共同分享,它是这样的:
select a.docId,a.docName,b.projectId,b.projectName,c.docAuditId,c.auditor from
t_doc a,t_project b,t_docAudit c,(select docId,max(docAuditId) as docAuditId from
t_docAudit group by docId) d where b.projectId=a.projectId and c.docId=a.docId and
c.docauditId=d.docauditId and c.docId=d.docId;
在此,我感谢我可爱的薄荷,我简直是爱死你了!薄荷!
同时,我也感谢所有给我帮助和回复的兄弟姐妹们!谢谢!(*^__^*)