Ignite SQL Merge Enthält Neue Zeile nicht einfügen, wenn mit Nested Select Gebraucht

stimmen
0

Wenn Merge SQL mit verschachtelten Select verwendet wird, Merge Aggregation behandelt nicht korrekt für neue Zeilen. Zum Beispiel ist die Tabelle

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

So führen Sie neue und bestehende Zeilen, die folgende Merge SQL verwendet wird, da es nicht bekannt ist, welche Zeilen bereits vorhanden sind oder nicht. Diese Art von Merge / Upsert ist für Zählung Aggregation Anwendungsfälle typisch.

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

Doch für neue Zeilen, Merge speichert NULL für Zählung statt der angegebenen Zählwerte. Diese Art der Aggregation auf den Werten einer Spalte ist typisch für merge / Upsert für Fälle Aggregation Einsatz. Ich habe auch versucht casewhen und IFNULL auf der verschachtelten select-Klausel zu verwenden, aber keiner wird das Problem behoben. Gibt es eine Behelfslösung Lösung für dieses Problem ist Merge?

Auch wenn es so eine Behelfslösung Lösung, die Verwendung von verschachtelten select in Merge pro Zeile würde bewirken, dass die SQL-String sehr lang sein für Massen Anzahl der Zeilen tun Merge, die für Upsert Betrieb auch typisch ist. Zündet Merge eine SQL-Version Kurz Hand hat, ähnlich wie MemSql bietet für die gesamte SQL-Zeichenfolge nicht pro einzelnen Zeilen wie in

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

Vielen Dank.

Michael

Veröffentlicht am 08/11/2018 um 00:01
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Haben Sie versucht COALESCE()?

(1, 'aaa', 500 + COALESCE((SELECT count  FROM Test1 WHERE KEY1 = 1), 0)),
Beantwortet am 14/11/2018 um 14:30
quelle vom benutzer

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