与嵌套选择一起使用时,Ignite的合并SQL不会插入新行

问题描述 投票:0回答:1

当Merge SQL与嵌套Select一起使用时,Merge不会正确处理新行的聚合。例如,表格是

CREATE TABLE Test1 (
  key1 int  PRIMARY key,
  Name varCHAR(52),
  count int
) WITH "template=REPLICATED, backups=0, CACHE_NAME=Test1";

要合并新行和现有行,请使用以下合并SQL,因为不知道哪些行已存在。这种类型的合并/ upsert是计数聚合用例的典型。

MERGE INTO Test1(key1, name, count) VALUES
  (1, 'aaa', 500 + (SELECT count  FROM Test1 WHERE KEY1 = 1)),
  (2, 'bbb', 700 + (SELECT count  FROM Test1 WHERE KEY1 = 2)),
   ...
  (1000, 'zzz', 350 + (SELECT count  FROM Test1 WHERE KEY1 = 1000)),

但是,对于新行,Merge将NULL存储为count而不是指定的计数值。列的值上的这种类型的聚合对于聚合用例的合并/ upsert是典型的。我还试图在嵌套的select子句中使用casewhen和ifnull,但是没有人解决这个问题。这个Merge的问题是否有解决方案?

此外,如果存在这样的解决方案,则在每行合并中使用嵌套选择将导致SQL字符串非常长,以便为大量行进行合并,这对于upsert操作也是典型的。 Ignite Merge是否具有类似于MemSql为整个SQL字符串提供的简写SQL版本,而不是每个单独的行,如

ON DUPLICATE KEY UPDATE count  = count  + VALUES(count) 

谢谢。

迈克尔

sql ignite
1个回答
0
投票

你试过COALESCE()吗?

(1, 'aaa', 500 + COALESCE((SELECT count  FROM Test1 WHERE KEY1 = 1), 0)),
© www.soinside.com 2019 - 2024. All rights reserved.