Oracle左连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle左连接相关的知识,希望对你有一定的参考价值。

两个表,一个是人员表SYS_USER,一个是柜员账务表TELLER_ACCOUNT_MAIN,当插入一个新人的时候,由于没有金额交易,在账务表是查不到这个人的,但是我要查询到所有人,哪怕没有金额交易的,我让他的余额显示为0.00,并且我要取得这个柜员最后一次更新的余额,也就是当前的信息,账务表中有一个update更新时间。人员表中有user_type(人员类型)和账务表的teller_type是相同的。所以我要以人员表作为主表左联账务表,想要查询的是人员表的name,账务表的柜员编号teller_by和余额total_mount。求大神帮我写一下,

参考技术A WITH TELLER_ACCOUNT_MAIN AS(SELECT 1 teller_by,to_date('2018-05-01 13:23:55','yyyy-mm-dd hh24:mi:ss')update_time,500 total_mount FROM dual
UNION ALL SELECT 1 teller_by,to_date('2018-05-02 16:20:10','yyyy-mm-dd hh24:mi:ss'),777 total_mount FROM dual
)
,SYS_USER AS (SELECT 1 teller_by,'张三'NAME FROM dual
UNION ALL SELECT 2 teller_by,'李四'NAME FROM dual
)
--上面是虚拟的数据 ,因为我没有你的表
SELECT A.*,nvl(B.total_mount,0)total_mount FROM SYS_USER A LEFT JOIN (SELECT t.*
,row_number() OVER (PARTITION BY teller_by ORDER BY update_time DESC)rn
FROM TELLER_ACCOUNT_MAIN t)B ON A.teller_by=B.teller_by AND B.rn=1;

oracle 左连接

  oracle 对于一个左/右连接  你还在用 left join  on  吗?

 如果  你的答案是yes  那你就out了   叫你一种简单的  

以下是我自己写的sql

select  A.ID,A.NAME,B.GRADE FROM STUDENT A LEFT JOIN SCORE  B ON A.ID=B.STUID 

在看这篇文章之前 你这样写 我不怪你  如果 看了之后 你还是这样写 我就打你哦。

select  A.ID,A.NAME,B.GRADE FROM STUDENT A ,SCORE  B ON A.ID=B.STUID(+)

注意加号在哪边,哪边对应的表就是辅表。对应的是等号右边的连接。

如给的例子,加号在右边,那么score对应的就是辅表,而这个连接就是左连接。

 

以上是关于Oracle左连接的主要内容,如果未能解决你的问题,请参考以下文章

oracle中的右连接和左连接有啥区别?如果我们可以实现左连接在右连接中可以做的事情,为啥要使用 2 个单独的连接?

oracle左连接与右连接

Oracle - 如何对视图执行左连接?

Oracle 左连接右连接全外连接(+)号作用

oracle 左连接

带有左连接的 Oracle 更新