oracle主表2个字段动态关联从表问题

动态使用主表中2个字段关联从表达 objid

表A(主) ida,idb,type
表B(从) id,email

实际场景入下:
现在表A有2个字段ida,idb,他们分别关联表B的id,相当于一个发信。
如果type = 1,那么就使用ida关联表B查询到B的信息发送给B,
如果type = 2,那么就使用idb关联表B查询到B的信息发送给B。

本人谢了一段理想化的sql如下:

select decode(type,'1',a.ida,'2',a.idb,'默认') xxid ,a.*,b.* from a
left join b on a.xxid=b.objid

想法是根据type动态生成一个id去关联从表的id,但是执行失败。
有没有小伙伴能解决这个问题? 查询结果需要2个表的所有字段

select decode(type,'1',a.ida,'2',a.idb,'默认') xxid ,a.*,b.* from a
left join b on a.xxid=b.objid and a.type = 1
left join b on a.xxid=b.objid and a.type = 2
这种sql就不用写了,感觉太冗余。

1个回答

不谢

 select a,*,b.* from a,b where decode(a.type,'1',a.ida,'2',a.idb,'默认') = b.objid(+);
lb170243795
lb170243795 这个很简单的把
大约 2 年之前 回复
sinat_41641294
sinat_41641294 回复StackTc: 左连接,写错,不是左外
大约 2 年之前 回复
sinat_41641294
sinat_41641294 回复StackTc: a=b(+)就是左外连接的意思,跟你的a left join b是一个意思,不过最好习惯用(+)比较好,在表结构复杂的时候这个表达式在效率方面表现更好。推荐你看看这篇http://blog.csdn.net/liuwenbiao1203/article/details/52104718
大约 2 年之前 回复
StackTc
StackTc 老哥,能解释一下 你这个objid(+)是啥东西吗,发现你这个的确可以用
大约 2 年之前 回复
StackTc
StackTc 这样做不行,这个相当于内链接,如果b表没数据,那么就连a表数据也查不到了
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问