点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
编写一个upsert查询,该查询从Select查询中获取数据输入。 我需要具有Select查询的别名,以便我可以在上一个WHERE子句中使用它。 当我单独运行它时,select查询正在工作,但由于无法满足条件而无法执行查询,因此无法具有别名。 在Hana Service中运行此查询。
下面是表格的片段。
COM_SAP_APIMGMT_ANALYTICS_READSERVICE_MASTER_TABLE
COM_SAP_APIMGMT_ANALYTICS_READSERVICE_AGGREGATED_TABLE
upsert" 98CF35ADCA7E47999D27B1D4EA8228F8"。" COM_SAP_APIMGMT_ANALYTICS_READSERVICE_AGGREGATED_TABLE"如AGG_TABLE ( "ID", " APIPROXY", " REQUESTMETHOD", ) 值( 选择 SYSUUID, " API_PROXY", " REQUEST_METHOD", 从" COM_SAP_APIMGMT_ANALYTICS_READSERVICE_MASTER_TABLE"开始为FACT_TABLE 哪里 " CREATED_TIME"> ='2020-05-16 09:00:00.000000000'和" CREATED_TIME" <='2020-05-16 09:30:00.000000000' 通过...分组 " API_PROXY", " REQUEST_URL", " PROXY_BASEPATH", " REQUEST_METHOD", ) 哪里 AGG_TABLE。" APIPROXY" = FACT_TABLE。" API_PROXY"并且 AGG_TABLE。" REQUESTMETHOD" = FACT_TABLE。" REQUEST_METHOD"
(49.2 kB)
为什么需要WHERE子句? upsert的目的是使用主键(在AGG上)确定FACT中的行是新的(插入)还是不新的(更新)。 SELECT列表将映射到您指定的表列,以便HANA已经知道您正在将APIPROXY与API_PROXY进行比较。
在这里举一个非常简单的示例:
AGG有2列,即A1和A2。 FCT有2列,A3和A4。 此命令使用AGG上的主键(主键在A1列上),并将其与FCT中A3列中的值进行比较。 upsert中的第一列根据语句的格式映射到select的第一列,依此类推。 无需提供where子句。
现在,如果在AGG上没有主键,那么总会得到新的行。 没有主键意味着没有办法检查必须更新的行,因此所有数据都将插入。
upsert语法确实支持WHERE子句,但这仅在不使用时才使用。 有一个子查询;
UPSERT命令这样说:带有子查询的UPSERT(或REPLACE)语句的运行方式类似于INSERT语句。 该命令的例外是,如果表中的现有行具有与新行相同的主键值,则该行将使用子查询中返回的记录进行更新。 如果表没有主键,则该命令以与INSERT语句等效的方式起作用,因为它不能用作索引来检查行重复。
Mark
沙希德·阿赫塔尔博士,
谢谢,现在看起来好多了。
upsert查询是否与硬编码值一起使用(取出选择查询)?
嗨,迈克·阿普比,
是的,如果我删除了最后一个where子句和表引用,Upsert查询也可以使用硬编码值,甚至可以使用select查询。
事实
AGG
查询摘要:
工作一个
查询摘要:不起作用
谢谢
Shahid Akhtar。
一周热门 更多>