Inner Join, Left Outer Join 和 Association 的区别
![Inner Join, Left Outer Join和Association的区别](https://static001.geekbang.org/infoq/31/31c6040f8703ab133fd55771f2516637.png)
测试用的 CDS 视图的源代码,第 8 行用 Inner Join 连接 TJ02T, 后者存放了所有系统状态的 ID 和描述。
![](https://static001.geekbang.org/infoq/f0/f0cea4df8fb4259912c1ed2aff1fe4a5.png)
Inner Join 测试结果:对于那些在 TJ02T 里没有维护描述信息的状态,它们不会出现在结果集里。
![](https://static001.geekbang.org/infoq/ba/ba3c0e6d0c00c1c03e35507f6e6527f7.png)
把第八行的 Inner Join 改成 Outer Join,测试结果相反:注意观察下图 stat 列值为 E0001 的行项目也出现在了结果集里。
![](https://static001.geekbang.org/infoq/6f/6fe89310d17b3b9e50c0175466f81ec5.png)
Association 的测试结果同 Left Outer Join 一致。
![](https://static001.geekbang.org/infoq/c1/c19c60f1e59cf203c5cffb6c17e04427.png)
Association 的底层实现实际上和 Left Outer Join 一致。有两种办法来验证这个结论。
方法 1
在 ABAP Development Studio 里预览一个含有 association 实现的 CDS view,能够在工具里发现该 association 最后是通过 Left Outer Join 实现的。
![](https://static001.geekbang.org/infoq/86/8655535ec04ac6ccbdc0cc5bdacf6342.png)
方法 2
事务码 ST05 里的这个按钮: 显示执行计划,也能显示出 association 底层是由 Left Outer Join 实现的。
![](https://static001.geekbang.org/infoq/ad/ad8fd2cf9dc9146a3237eb285bf97735.png)
![](https://static001.geekbang.org/infoq/34/34842bff70927b77d071b23f95386e54.png)
要获取更多 Jerry 的原创技术文章,请关注公众号"汪子熙":
![](https://static001.geekbang.org/infoq/fa/fae13b7ea040389729f7c8dc699d1a97.png)
版权声明: 本文为 InfoQ 作者【Jerry Wang】的原创文章。
原文链接:【http://xie.infoq.cn/article/684f1cdd389b1171b2e66d27f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论