小谈数据库的Left Outer Join和CTE
来源:互联网 发布:java手机编程软件 编辑:程序博客网 时间:2024/06/05 18:44
今天和经理一起合作写了一个非常长的Query, 对Join和CTE的理解又加深了许多。由于对真实需求的描述涉及到非常复杂的业务知识,所以在此文章对需求进行抽象的描述。
需求:
给定两个表A, B。A当中有三个Columns, 假定为C_A1,C_A2,C_A3, C_A4。B当中有也有两个值C_B1和C_B2。两个表没有外键联系,但是潜在的对应关系为C_A3 对应 C_B1, C_A4对应C_B2。
那么需要找出在每个拥有最大C_A2的items当中,C_A3 = C_B1, 但在这个item当中的C_A4,从B中找不到对应的C_B2。
例子:
A表
B表
那么该返回的应该是A表当中这个record
分析:
首先我们可以利用CTE找到A表当中的对应C_A2的最大值。
WITH max_c AS (SELECT C_A1, C_A3, C_A4, MAX(C_A2) max_c_a2FROM Agroup by C_A1, C_A3, C_A4)
然后,利用left outer join在B当中寻找C_A4不存在的项
SELECT * FROM A a1JOIN max_c mc ON (a1.C_A1 = mc.C_A1 AND a1.C_A3 = mc.C_A3 AND a1.C_A4 = mc.C_A4 AND a1.C_A1 = mc.max_c_a2)LEFT OUTER JOIN B b ON (a1.C_A3 = b.C_B1 AND a1.C_A4 = b.C_B2)WHERE b.C_B2 = NULL;
在这里正是利用了以下LEFT OUTER JOIN的特性
LEFT OUTER JOIN preserves the unmatched rows from the first (left) table, joining them with a NULL row in the shape of the second (right) table.
总结:这篇文章介绍了数据库中LEFT OUTER JOIN的实际项目中的应用。
0 0
- 小谈数据库的Left Outer Join和CTE
- left join 和 left outer join 的区别的总结
- left join 和 left outer join 的区别
- Left Join 和Left Outer Join 的比较
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别(转载)
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- 40、left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- left join 和 left outer join 的区别
- LightOJ 1214 - Large Division【同余定理】
- 清理SQLServer链接历史记录
- Java之I/O流小结
- Android应用中图片资源尺寸
- 黑马程序员——OC基础之NSMutableDictionary
- 小谈数据库的Left Outer Join和CTE
- Java 注释
- CodeIgniter 框架
- hdu 4281 Judges' response 状压DP+TSP ★★★★
- 第十一课——项目【1-5】
- mysql 修改密码,修改加密方式
- 【思考一】Android程序员想做手机游戏开发
- BZOJ 1036 树的统计Count(树链剖分+线段树)
- JAVA中获取项目文件路径