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

时间:2018-11-08 00:01:21

标签: sql ignite

将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,因为尚不清楚哪些行已经存在或不存在。这种类型的合并/向上插入通常用于计数聚合用例。

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)),

但是,对于新行,合并存储计数的NULL而不是指定的计数值。列值上的这种类型的聚合对于聚合用例的合并/向上插入是典型的。我还尝试在嵌套的select子句上使用casewhen和ifnull,但是没人能解决问题。是否有解决此合并问题的解决方法?

此外,如果有这种解决方法,则在每行合并中使用嵌套的select会导致SQL字符串对于执行大量行的合并非常长,这也是upsert操作的典型做法。 Ignite Merge是否具有类似于MemSql为整个SQL字符串提供的简写SQL版本,而不是像

中的每行那样
ON DUPLICATE KEY UPDATE count  = count  + VALUES(count) 

谢谢。

迈克尔

1 个答案:

答案 0 :(得分:0)

您尝试过COALESCE()吗?

(1, 'aaa', 500 + COALESCE((SELECT count  FROM Test1 WHERE KEY1 = 1), 0)),