CDS相关资料整理(十)CDS中JOIN的使用说明

fd50629625bf0e7d8fe5552c6ecc4218.jpeg

拍摄于公园

原文地址:

https://www.ut163.com/fiori_learning_arrangement/sap-cds/how_to_use_join_in_cds/

CDS中JOIN的使用说明

  • 外连接 Outer Joins

  • 左外连接 Left Outer Join

  • 右外连接 Right Outer Join

  • 完全外部联接 Full Outer Join

  • 嵌套联接Nested Joins

在CDS中,我们可以使用Associations,来关联表,也可以使用JOIN来关联表,在这里主要介绍JION相关的LEFT JION ,RIGHT OUTER JION ,CROSS JOIN的使用,关于Associations的使用说明可参看这里。

1.外连接 Outer Joins

此为SQL最简单也是最常见的联接类型。ABAP词典的经典数据库视图不支持此联接方式

3e870e7272c95ab2e7219bf05387f59a.png

上图显示了一个内部联接:如果满足JOIN条件,则左表的一行和右表的一行将合并到一个公共结果行,也就是出来的结果,只会是两个表中都存在的行,不存在行不会出现在结果中。

2.左外连接 Left Outer Join

  • 结果集可能包含左侧表的条目,而右侧表中的条目不匹配。

  • 在经典的Open SQL中受支持

  • 在左外部联接中,如果左表的一行和右表的一行满足JOIN条件(如内部联接),则将它们合并到公共结果行。

  • 另外,将左表中与右表中不匹配的行复制到查询结果中。缺少的值(来自右表)用NULL值填充。

  • 左外部联接确保左表中满足选择条件的任何条目在联接结果中至少出现一次

注意: 在Open SQL中使用CDS视图时,这些NULL值设置为类型友好的初始值。

b696a9b5370cdf000dcfe16c58b3251b.png

例子

3e50a2cc13bd4d845848abadc4f94f6c.png

3.右外连接 Right Outer Join

  • 集可能包含右表的条目,而左表中没有匹配的条目

  • 在Open SQL(自NW 7.40 SP05起)和ABAP CDS中受支持

  • 在右外部联接中,左表和右表的角色被交换:

  • 右表中的行与左表中的不匹配行将被复制到查询结果中。缺少的值(从左表开始)用NULL值填充。

  • 右外部联接可确保满足选择条件的右表的任何条目在联接结果中至少出现一次

5f7b4c8db25f7b3fcd8e2badbd7f78ba.png

例子

0382898dec7d3f0c68b5f28a9207076f.png

4.完全外部联接 Full Outer Join

注:(ABAP CDS不支持),目前,ABAP CDS视图不支持此功能。将来可能会支持。

  • 结果集可能包含左侧表的条目,而右侧表中没有匹配的条目

  • 结果集可能包含右侧表的条目,而左侧表中没有匹配的条目

  • Open SQL和ABAP CDS尚不支持

  • 在完全外部联接中,两个表的处理方式相同。

  • 将两个表中没有匹配的表的行复制到查询结果中。缺失值(来自另一张表)由NULL值填充。

  • 在完全外部联接中,两个表的处理方式相同。

  • 将两个表中没有匹配的表的行复制到查询结果中。缺失值(来自另一张表)由NULL值填充。

e53d7578d9b80adc60e3e240fc1cc1c5.png

注意: Open SQL或ABAP CDS尚不支持完全外部联接。解决方法是,可以使用左外部联接和右外部联接的UNION(请参阅下文)。

当使用CROSS JOIN连接两个数据源时,结果是这两个数据源的叉积:左侧的所有条目与右侧的所有条目组合在一起。结果集中的行数是左侧的行数乘以右侧的行数。不能为交叉连接指定连接条件。

注意:交叉连接的行为类似于内部或外部连接,其接通条件始终为true。具有WHERE条件的交叉联接与具有相同ON条件的内部联接具有相同的结果。与内部联接不同,在交叉联接中,在评估条件之前,首先读取所有数据。在内部联接中,仅读取满足ON条件的数据。

例:

53325ffb09225326cd9e560df1961ed4.png

5.嵌套联接Nested Joins

显式(带括号)或隐式(无括号)

在CDS中,嵌套联接是可以没括号的,但推荐使用括号,这样代码更易于阅读,有括号时先执行括号时的,没括号时按如下顺序执行。

隐式执行顺序

内外连接:设置接通条件。

交叉连接:从左到右

  • CDS视图定义的from子句允许嵌套连接表达式。

  • 您可以使用括号(方括号)来影响系统评估这些嵌套表达式的顺序。

  • 对于内部联接和外部联接,通过on条件的排列。从左到右,最相邻的ON条件分配给每个联接,并且该表达式被隐式括在括号中。

  • 交叉联接从左到右进行评估。

注意:如果将多个交叉联接组合在一起,则评估顺序无关紧要。结果始终是相同的,行数是所有涉及的数据源的行数的乘积。如果交叉联接与内部联接和外部联接相结合,则结果可能取决于求值顺序或括号。

8111ad1c541f889fafa303f97dddc192.png
  • 本示例读取有关票证计数器(表计数器)的信息。该信息与有关售票柜台所在的机场(餐桌机场)和运行柜台的承运人(餐桌吓人)的详细信息一起。

  • 该示例使用外部联接,因为结果集还应该包括没有票务柜台的机场和完全不运行任何票务柜台的承运人。

  • 不需要括号。但是,它们用于增加表达式的可读性。

017d44dbfcfe4c91075f016bbd877771.png

上图显示了相同的嵌套连接表达式,但是这次没有括号。这对结果没有影响。这两个联接的评估顺序完全相同。但是即使对于有经验的开发人员,乍一看,评估顺序也不会很明显。

注意: 使用嵌套联接定义视图时,请始终添加括号以提高可读性。

推荐阅读:

ABAP新语法1

《ABAP新语法2》

《SM30添加按钮:批导,筛选,排序等完整demo 》

《关于 SM30/VIEW_MAINTENANCE_CALL锁整张表问题》

《Demo:弹出文本输入框》

《关于update task几个有意思的测试》

动态批量修改任意表任意字段的值

动态获取查询条件的一个小Demo

使用cl_gui_docking_container 实现多ALV》

VOFM 修改 组单开票时 会计凭拆分规则

DEMO SUBMIT 某程序并获取该程序ALV数据

DEMO:S/4 1809 FAGLL03H 增加字段增强

几个ABAP实用模板,体力活就别一行行敲了,复制粘贴得了

DEMO:BTE增强实现凭证创建检查

SAP Parallel Accounting(平行分类账业务)配置+操作手册+BAPI demo程序

CC02修改确认日期BAPI:Processing of change number  was canceled》《我是怎样调试BAPI的,以F-02为例

我是不是被代码给耽误了……不幸沦为一名程序员……

三亚自由行攻略(自己穷游总结)

苏州游记

记码农十周年(20110214--20210214)

不一样的SAP干货铺群:帅哥靓妹、红包、烤羊腿!

十年老码农搬砖习惯和技巧

我这个老码农是怎么debug标准程序的

我是怎样调试BAPI的,以F-02为例

杂谈:几种接口

Odata 增删改查详例

ODATA CREATE_DEEP_ENTITY 详例

RESTful DEMO 一:SAP 如何提供 RESTful Web 服务

RESTful DEMO 四 :增删改查及调用

DEMO  search help 增强 ( vl03n KO03 等)

录BDC时  弹出的公司代码框问题

《搜索帮助系列》

《增强相关》

Debug 系列

DEBUG  系列一:Dump debug
DEBUG  系列二:Configure Debugger Layer
DEBUG系列三:使用  F9 和 watch point
DEBUG系列四:第三方接口debug
DEBUG系列五:Update  模式下的function debug
DEBUG系列六:后台JOB  debug
DEBUG系列七:保存测试参数
DEBUG系列八:Debug弹出框
debug系列九:SM13查看update更新报错
DEBUG系列十:Smartforms  debug
DEBUG系列十一:GGB1  debug
Debug系列十二:QRFC  队列 debug
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CDS序列连续六个碱基组成的密码子对的使用频率可以通过以下步骤用 Python 进行计算: 1. 将密码子与相应的氨基酸进行配对。可以使用字典将密码子和氨基酸进行映射。 2. 读取 CDS 序列并将其转换为 RNA 序列。 3. 遍历 RNA 序列,将每6个碱基作为一个六连体密码子进行计数。 4. 计算每个六连体密码子对出现的频率。 以下是一个示例代码,可以帮助你完成连续六个碱基组成的密码子对使用频率的计算: ```python # 密码子与氨基酸的映射 codon_table = { 'TTT': 'F', 'TTC': 'F', 'TTA': 'L', 'TTG': 'L', 'CTT': 'L', 'CTC': 'L', 'CTA': 'L', 'CTG': 'L', 'ATT': 'I', 'ATC': 'I', 'ATA': 'I', 'ATG': 'M', 'GTT': 'V', 'GTC': 'V', 'GTA': 'V', 'GTG': 'V', 'TCT': 'S', 'TCC': 'S', 'TCA': 'S', 'TCG': 'S', 'CCT': 'P', 'CCC': 'P', 'CCA': 'P', 'CCG': 'P', 'ACT': 'T', 'ACC': 'T', 'ACA': 'T', 'ACG': 'T', 'GCT': 'A', 'GCC': 'A', 'GCA': 'A', 'GCG': 'A', 'TAT': 'Y', 'TAC': 'Y', 'TAA': '*', 'TAG': '*', 'CAT': 'H', 'CAC': 'H', 'CAA': 'Q', 'CAG': 'Q', 'AAT': 'N', 'AAC': 'N', 'AAA': 'K', 'AAG': 'K', 'GAT': 'D', 'GAC': 'D', 'GAA': 'E', 'GAG': 'E', 'TGT': 'C', 'TGC': 'C', 'TGA': '*', 'TGG': 'W', 'CGT': 'R', 'CGC': 'R', 'CGA': 'R', 'CGG': 'R', 'AGT': 'S', 'AGC': 'S', 'AGA': 'R', 'AGG': 'R', 'GGT': 'G', 'GGC': 'G', 'GGA': 'G', 'GGG': 'G' } # 读取 CDS 序列并转换为 RNA 序列 cds_seq = input("请输入CDS序列:") rna_seq = cds_seq.replace('T', 'U') # 计算连续六个碱基组成的密码子对的使用频率 hexamer_freq = {} for i in range(0, len(rna_seq)-5): hexamer = rna_seq[i:i+6] if all(c in codon_table for c in hexamer): aa = ''.join(codon_table[c] for c in hexamer) if aa in hexamer_freq: hexamer_freq[aa] += 1 else: hexamer_freq[aa] = 1 # 输出结果 print("连续六个碱基组成的密码子对使用频率:") for aa, freq in hexamer_freq.items(): print(aa, ":", freq) ``` 你可以将输入的 CDS 序列替换成你要计算的序列,然后运行代码,即可得到连续六个碱基组成的密码子对的使用频率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值