将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)
谢谢。
迈克尔
答案 0 :(得分:0)
您尝试过COALESCE()
吗?
(1, 'aaa', 500 + COALESCE((SELECT count FROM Test1 WHERE KEY1 = 1), 0)),