当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)
谢谢。
迈克尔
你试过COALESCE()
吗?
(1, 'aaa', 500 + COALESCE((SELECT count FROM Test1 WHERE KEY1 = 1), 0)),