急,请教数据库高手!

sisixixi 2013-04-24 10:17:36
有如下语句:
1(对应如下语句)
|
select (select m.policy_code from t_contract_master m where m.policy_id=1234)transfer,
2(对应下列语句)
|
(select m.policy_code from t_contract_master m where m.policy_id=5678)transfer from dual;
现在需要达到的效果是我结果(transfer)只取1,2其中一个,如何做呢?各位快帮帮忙!
...全文
219 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
heyingss 2013-05-21
  • 打赏
  • 举报
回复
我最近也被长SQL困扰着......
wqkjj 2013-05-19
  • 打赏
  • 举报
回复
这么长的SQL,分成几个SQL语句取值吧,然后再利用前面的逻辑不就可以解决了? 个人习惯不主张长sql语句。 有时候,只要能解决问题,不在乎要一个SQL还是多个SQL实现。
sisixixi 2013-04-25
  • 打赏
  • 举报
回复
先谢谢各位啦!!现在在做保险中的转账操作,当你输入一个保单号(唯一),就会查询出相应的转账信息,你这个保单曾经转给哪个保单(transfer_to_policy,这个已经解决啦),哪个保单曾经转过给你(也就是转过账给当前保单transfer_from_policy--现在就是这个没解决),以下就是两个语句,要结合才能达到效果(麻烦的就是数据库这两表定好了不能通过transfer_to_policy来直接找到transfer_from_policy,所以只能转来转去咯) 这是第一个语句:(所带的条件是查询出来的transfer_from_policy等于当前保单) sql.append(" (select distinct(m.policy_code) from t_contract_master m ,t_cash t "); sql.append("where t.policy_id=m.policy_id and t.fee_id in ("); sql.append(" select f.fee_id from t_arap_offset f where f.offset_id in("); sql.append(" select ao.offset_id from t_arap_offset ao,t_cash tc"); sql.append(" where ao.fee_id = tc.fee_id and ao.arap_table=1 and ao.offset_transfer='Y'"); sql.append(" and tc.policy_id="+receivablePayableVO.getPolicyId()); sql.append(") and f.arap_table=1 and f.offset_amount<0 and f.offset_transfer='N')" ); sql.append(" and exists(select 1 from t_contract_master m ,t_cash tc where m.policy_id=tc.policy_id"); sql.append(" and tc.fee_id in("); sql.append(" select taf.fee_id from t_arap_offset taf,t_cash tc where taf.fee_id=tc.fee_id and tc.fee_id = c.fee_id and taf.offset_id in("); sql.append(" select ola.offset_id from t_prem_arap a, t_arap_offset ola where ola.fee_id = a.list_id"); sql.append(" and a.list_id in ("+receivablePayableVO.getFeeId()+") and ola.arap_table = 4 ) and tc.pay_mode=5 and tc.fee_type=11)"); sql.append(" and m.policy_id="+receivablePayableVO.getPolicyId()+")) TRANSFER_FROM_POLICY,"); 这是第二个语句:(所带的条件是查询出来的transfer_from_policy不等于当前保单) sql.append(" (select cm.policy_code from t_contract_master cm where cm.policy_id = "+receivablePayableVO.getPolicyId()); sql.append(" and exists(select 1 from t_contract_master m ,t_cash tc where m.policy_id=tc.policy_id"); sql.append(" and tc.fee_id in("); sql.append(" select taf.fee_id from t_arap_offset taf,t_cash tc where taf.fee_id=tc.fee_id and tc.fee_id = c.fee_id and taf.offset_id in("); sql.append(" select ola.offset_id from t_prem_arap a, t_arap_offset ola where ola.fee_id = a.list_id"); sql.append(" and a.list_id in ("+receivablePayableVO.getFeeId()+") and ola.arap_table = 4 ) and tc.pay_mode=5 and tc.fee_type=11)"); sql.append(" and cm.policy_id <> m.policy_id)) TRANSFER_FROM_POLICY,"); 在jsp中拿值显示的时候就是拿TRANSFER_FROM_POLICY,但是现在有两个,不知如何取舍(要达到的效果相当于第一语句有值就拿第一个,第二有值就拿第二个)
wqkjj 2013-04-25
  • 打赏
  • 举报
回复
select policy_code from ( select m.policy_code from t_contract_master m where (m.policy_id=1234 or m.policy_id = 45678) order by policy_id ) where rownum = 1; 这样可以满足LZ的要求。但优先关系先得通过大小关系来确定。不如5L方便,但貌似直观些。
sisixixi 2013-04-24
  • 打赏
  • 举报
回复
呵呵,实际在项目中还是有不同的,我只能大概地描述一下了 select (select m.policy_code from t_contract_master m where m.policy_id=1234)A, (select m.policy_code from t_contract_master m where m.policy_id=5678)B from dual; 这样查询出来的结果A,B,但现在我只要A或是B单独存在(A,B条件是相悖的),哪个有值就取哪个,有没有办法呢
u010412956 2013-04-24
  • 打赏
  • 举报
回复
把原来的效果,现在的效果 清楚说明一下。。 对楼主的问题,有点半知半解。。
wqkjj 2013-04-24
  • 打赏
  • 举报
回复
5L正解 4L你的写法也不符合LZ的意思 我试下了,在rownum条件存在时,order by是失效的。因此我那种写法不能保证得到LZ期望的结果。
rexsen 2013-04-24
  • 打赏
  • 举报
回复
引用 6 楼 kongxv0001 的回复:
引用 5 楼 rexsen 的回复:select nvl(A,B)from (select (select m.stuid from students m )A,(select m.stuname from students m )B from dual)SQL code?1select nvl(A,B)from (select (select m.stuid from ……
是不是你想要的呢?
kongxv0001 2013-04-24
  • 打赏
  • 举报
回复
引用 5 楼 rexsen 的回复:
select nvl(A,B)from (select (select m.stuid from students m )A,(select m.stuname from students m )B from dual)
select nvl(A,B)from (select (select m.stuid from students m )A,(select m.stuname from students m )B from dual)
rexsen 2013-04-24
  • 打赏
  • 举报
回复
select nvl(A,B)from (select (select m.stuid from students m )A,(select m.stuname from students m )B from dual)
u010412956 2013-04-24
  • 打赏
  • 举报
回复
引用 3 楼 wqkjj 的回复:
select m.policy_code from t_contract_master m where (m.policy_id=1234 or m.policy_id = 45678) and rownum = 1
你这个写法有问题,不如这么写: select max(m.policy_code) from t_contract_master m where (m.policy_id=1234 or m.policy_id = 5678)
wqkjj 2013-04-24
  • 打赏
  • 举报
回复
select m.policy_code from t_contract_master m where (m.policy_id=1234 or m.policy_id = 45678) and rownum = 1

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧