关于四表的查询

caolei369 2013-12-02 08:44:54
表名:ACCOUNT_INFO
字段:ID,BANKID,CARDNO

表名:BANK_INFO
字段:ID,BANKNAME

表名:TYPE_BANK
字段:ID,BANKACCOUNTID,FUNDSTYPEID

表名;FUNDS_TYPE
字段:ID,FUNDSTYPECODE,REMARK

现四个表,以ACCOUNT_INFO表为主表,通过ACCOUNT_INFO的BANKID去匹配BANK_INFO表的ID,再拿ACCOUNT_INFO的ID去匹配TYPE_BANK的BANKACCOUNTID,取到FUNDSTYPEID的值,然后再去FUNDS_TYPE表匹配FUNDSTYPECODE
求超级SQL大神,这种查询应该用哪种连接查询 ?求SQL大神!!
...全文
381 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
_拙计 2013-12-12
  • 打赏
  • 举报
回复
引用 8 楼 qq304213346 的回复:
[quote=引用 7 楼 caolei369 的回复:] 他这个用的是什么连接查询?
a.BANKID = b.ID(+) A表的数据全部检索,也就是你说的以A表为主表。 [/quote] 就是和left join 和right join一样,oracle高版本之后就是用(+)了,你写left join oracle还是会解析成(+)的
caolei369 2013-12-03
  • 打赏
  • 举报
回复
有人没啊,求解啊
caolei369 2013-12-03
  • 打赏
  • 举报
回复
好冷清的说啊!!
  • 打赏
  • 举报
回复
引用 2 楼 caolei369 的回复:
[quote=引用 1 楼 gioh0022 的回复:]
select a.ID,
       a.BANKID,
       a.CARDNO,
       b.BANKNAME,
       c.BANKACCOUNTID,
       c.FUNDSTYPEID,
       d.FUNDSTYPECODE,
       d.REMARK
  from ACCOUNT_INFO a, BANK_INFO b, TYPE_BANK c, FUNDS_TYPE d
 where a.BANKID = b.ID(+)
   and a.ID = c.BANKACCOUNTID(+)
   and c.FUNDSTYPEID = d.FUNDSTYPECODE
这种写法貌似效率不行?这是最简单的写法。[/quote] 额,这个这么明显的四表连接你还想要什么复杂的写法; 加对索引加好并行,还有哪一种写法比这个好你倒是教教我咯
陶小淘 2013-12-03
  • 打赏
  • 举报
回复
左右连接。您以ACCOUNT_INFO表为主表,那必须取出该表的完整数据,所以用到了(+)。(+)跟哪就取出对面的全部。
请叫我-雷人 2013-12-03
  • 打赏
  • 举报
回复
引用 7 楼 caolei369 的回复:
他这个用的是什么连接查询?
a.BANKID = b.ID(+) A表的数据全部检索,也就是你说的以A表为主表。
caolei369 2013-12-03
  • 打赏
  • 举报
回复
他这个用的是什么连接查询?
  • 打赏
  • 举报
回复
#1楼写的sql不错!
caolei369 2013-12-02
  • 打赏
  • 举报
回复
引用 1 楼 gioh0022 的回复:
select a.ID,
       a.BANKID,
       a.CARDNO,
       b.BANKNAME,
       c.BANKACCOUNTID,
       c.FUNDSTYPEID,
       d.FUNDSTYPECODE,
       d.REMARK
  from ACCOUNT_INFO a, BANK_INFO b, TYPE_BANK c, FUNDS_TYPE d
 where a.BANKID = b.ID(+)
   and a.ID = c.BANKACCOUNTID(+)
   and c.FUNDSTYPEID = d.FUNDSTYPECODE
这种写法貌似效率不行?这是最简单的写法。
  • 打赏
  • 举报
回复
select a.ID,
       a.BANKID,
       a.CARDNO,
       b.BANKNAME,
       c.BANKACCOUNTID,
       c.FUNDSTYPEID,
       d.FUNDSTYPECODE,
       d.REMARK
  from ACCOUNT_INFO a, BANK_INFO b, TYPE_BANK c, FUNDS_TYPE d
 where a.BANKID = b.ID(+)
   and a.ID = c.BANKACCOUNTID(+)
   and c.FUNDSTYPEID = d.FUNDSTYPECODE

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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