求助一查询语句

slio2008 2012-07-20 08:42:15
GM 我刚才发个帖子,再查看帖子 怎么报404

言归正卷 情况如下:

a表有主叫被叫两个字段 是多对多关系 如下:
callera calleda
123 000
124 111
125 000
125 111
126 222
127 333
b表有被叫和短信内容两个字段 被叫有重复的 不同被叫短信内容也有相同的
calledb smscontent
000 aaa
111 bbb
000 ccc
222 aaa

要得出b表中被叫 对应的a表主叫和b表的内容
calledb callera smscontent
000 123 aaa
111 124 bbb
000 125 ccc
222 126 aaa
...全文
694 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
slio2008 2013-01-28
  • 打赏
  • 举报
回复
多谢各位兄台解答 后来没用了 所以我没去测试了 结贴了
magirl 2012-07-20
  • 打赏
  • 举报
回复
这个貌似没办法做连接啊,结果会是笛卡尔集,需要先处理一个表,将短信内容或者主叫合并生成被叫记录唯一的一个中间表,然后再进行连接。不然查询速度和结果都会有问题
  • 打赏
  • 举报
回复
这样可以吧?



with t1 as
(
select '123' callera,'000' calleda from dual
union all
select '124' callera,'111' calleda from dual
union all
select '125' callera,'000' calleda from dual
union all
select '125' callera,'111' calleda from dual
union all
select '126' callera,'222' calleda from dual
union all
select '127' callera,'333' calleda from dual
),t2 as
(
select '000' calledb,'aaa' smscontent from dual
union all
select '111' calledb,'bbb' smscontent from dual
union all
select '000' calledb,'ccc' smscontent from dual
union all
select '222' calledb,'ddd' smscontent from dual
)

select b.calledb,a.callera,b.smscontent
from (
select rownum r,calledb,smscontent,row_number() over(partition by calledb order by rownum) rn
from t2
) b left join
(
select calleda,callera,row_number() over(partition by calleda order by rownum) rn
from t1
) a on b.calledb = a.calleda and b.rn = a.rn
order by b.r


calledb callera smscontent
-------------------------------------
1 000 123 aaa
2 111 124 bbb
3 000 125 ccc
4 222 126 ddd

  • 打赏
  • 举报
回复
A表中 被叫并不是唯一 在B表中被叫 也不是唯一 如何来关联?
slio2008 2012-07-20
  • 打赏
  • 举报
回复
多谢大家的踊跃回复
是用被叫来关联 得出B表中被叫 所对应的A表主叫
但情况很复杂,B表中的某个被叫 在A表中的被叫里会出现多次
而且在A表中 同一个被叫也可能对应多个主叫。 一个主叫也可能对应多个被叫

renkuan719朋友的语句 查出来的结果不对
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

不急着出SQL
楼主没把连接条件说出来,表示他也不清楚里面的关系
对这种情况,不建议新手们直接写SQL

给楼主的建议,把业务关系先梳理清楚。
数据是否能按自己的理解展现,其中是否存在想像不到的情况。如,a、b 两表从业务上 是不存在关联的,两者强制关联,数据就会乱(a 是 电话、b 是 短信)?
[/Quote]

差不多吧

表A:主叫、被叫
表B:被叫、短信

应该是以被叫来关联
coolkisses 2012-07-20
  • 打赏
  • 举报
回复
不急着出SQL
楼主没把连接条件说出来,表示他也不清楚里面的关系
对这种情况,不建议新手们直接写SQL

给楼主的建议,把业务关系先梳理清楚。
数据是否能按自己的理解展现,其中是否存在想像不到的情况。如,a、b 两表从业务上 是不存在关联的,两者强制关联,数据就会乱(a 是 电话、b 是 短信)?
槑党--一缕风 2012-07-20
  • 打赏
  • 举报
回复
select tb.calledb,ta.callera,tb.smscontent from b tb
left join a ta on tb.calledb=ta.calleda
小飛不想飛 2012-07-20
  • 打赏
  • 举报
回复

select b.calledb,a.callera,b.smscontent from b,a where b.calledb=a.calleda
--没测过,不知道可不可以
hupeng213 2012-07-20
  • 打赏
  • 举报
回复
好象缺少连接条件

17,088

社区成员

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

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