当前位置: 代码迷 >> Oracle开发 >> sql子查询有关问题
  详细解决方案

sql子查询有关问题

热度:47   发布时间:2016-04-24 07:21:46.0
sql子查询问题
表一 temp1
  login_id name post_name
  1 张三 java
  2 李四 .net

表二 temp2
  login_id name pro_post_name result desc time
  1 张三 java 1 。。。 2012-05-12
  1 张三 java 2 。。。 2012-06-05
  2 李四 java 2 。。。 2012-05-22
  2 李四 .net 2 。。。 2012-05-12


要做的是根据表一中的 login_id 和 post_name 查询出来 表二中对应的 reuslt 和 desc
我的做法是
select
  a.login_id,
  a.name,
  a.post_name,
 (select b.result from temp2 b where b.login_id =a.login_id and b.pro_post_name=a.post_name and ROWNUM <=1 order by time desc ),
 (select b.desc from temp2 b where b.login_id =a.login_id and b.pro_post_name=a.post_name and ROWNUM <=1 order by time desc )
from temp1 a


如果单独写一条SQL 
select b.desc from temp2 b where b.login_id ='1'and b.pro_post_name='java'and ROWNUM <=1 order by time desc 
可以查询到数据,但是写成两个表关联起来 就差不多了。
求解。

------解决方案--------------------
SQL code
with temp1(login_id,name,post_name) as(select 1,'张三','java' from dualunion all select 2,'李四','.net' from dual),temp2(login_id,name,pro_post_name,result,"desc",time) as(select '1','张三','java',1,'desc1',to_date('2012-05-12','yyyy-mm-dd') from dualunion all select '1','张三','java',2,'desc2',to_date('2012-06-05','yyyy-mm-dd') from dualunion all select '2','李四','java',2,'desc3',to_date('2012-05-22','yyyy-mm-dd') from dualunion all select '2','李四','.net',2,'desc4',to_date('2012-05-12','yyyy-mm-dd') from dual)select a.login_id,a.name,a.post_name,b.result,b."desc"from temp1 ainner join temp2 b on a.login_id=b.login_id and a.post_name=b.pro_post_name    and b.time=(select max(time) from temp2 c where c.login_id=b.login_id and c.pro_post_name=b.pro_post_name);/*  LOGIN_ID NAME         POST_NAM     RESULT desc                                ---------- ------------ -------- ---------- ----------                                   1 张三         java              2 desc2                                        2 李四         .net              2 desc4   */
  相关解决方案