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 dualUNION 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左连接的主要内容,如果未能解决你的问题,请参考以下文章