Zapálit je sloučit SQL nevloží nový řádek při použití vnořených Select

hlasů
0

Je-li sloučit SQL používat vnořené Select, sloučit nezpracovává agregaci správně pro nové řádky. Například tabulka

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

Sloučit nové i existující řádky následující sloučit SQL se používá, protože není známo, které řádky již existují, nebo ne. Tento typ sloučení / upsert je typická pro případy užití počet agregace.

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

Nicméně, pro nové řádky, Merge obchody NULL pro sčítání místo zadaných počtu hodnot. Tento typ agregace na hodnotách sloupci je typická pro sloučení / upsert pro případy použití agregace. Také jsem se snažil použít casewhen a ifnull na vnořené klauzuli SELECT, ale ani jeden z nich řeší problém. Existuje řešení obejití problému toto sloučení je?

Také v případě, že je taková práce kolem řešení, použití vnořené select v korespondenci na řadě by způsobit SQL řetězec být velmi touží po tom korespondence pro hromadné počet řádků, které je typické i pro provoz upsert. Má Ignite korespondence mít short-hand SQL verze podobné tomu, co MemSql poskytuje po celou dobu řetězec SQL, spíše než na každý jednotlivý řádek stejně jako v

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

Dík.

Michal

Položena 08/11/2018 v 00:01
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Už jste vyzkoušeli COALESCE()?

(1, 'aaa', 500 + COALESCE((SELECT count  FROM Test1 WHERE KEY1 = 1), 0)),
Odpovězeno 14/11/2018 v 14:30
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more