Ignite της συγχώνευσης του SQL δεν εισάγει νέα σειρά όταν χρησιμοποιείται με ένθετα Επιλέξτε

ψήφοι
0

Όταν Συγχώνευση SQL χρησιμοποιείται με ένθετα Επιλέξτε, συγχώνευση δεν χειρίζεται σωστά συνάθροιση για νέες σειρές. Για παράδειγμα, ο πίνακας είναι

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

Ωστόσο, για τις νέες σειρές, Συγχώνευση καταστήματα NULL για την καταμέτρηση αντί των καθορισμένων τιμών καταμέτρηση. Αυτό το είδος της συσσωμάτωσης στις αξίες της στήλης είναι τυπική για συγχώνευση / upsert για περιπτώσεις χρήσης συσσωμάτωση. Επίσης, προσπάθησε να χρησιμοποιήσει casewhen και ifnull στο ένθετο επιλέξτε ρήτρα, αλλά ούτε το ένα επιλύει το ζήτημα. Είναι μια λύση έργο-γύρω για την έκδοση αυτής της συγχώνευσης εκεί;

Επίσης, αν υπάρχει ένα τέτοιο έργο-γύρω λύση, η χρήση των ένθετων επιλέξτε το Merge ανά γραμμή θα προκαλέσει η συμβολοσειρά SQL να είναι πολύ μεγάλο για να κάνει Συγχώνευση για τη μαζική αριθμό των γραμμών, η οποία είναι επίσης χαρακτηριστική για τη λειτουργία upsert. Μήπως Ignite Συγχώνευση έχουν ένα μικρό χέρι SQL έκδοση παρόμοιο με αυτό που προβλέπει MemSql για το σύνολο του SQL σειρά και όχι ανά μεμονωμένο σειρά όπως και στην

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

Ευχαριστώ.

Μιχαήλ

Δημοσιεύθηκε 08/11/2018 στις 00:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Έχετε δοκιμάσει COALESCE();

(1, 'aaa', 500 + COALESCE((SELECT count  FROM Test1 WHERE KEY1 = 1), 0)),
Απαντήθηκε 14/11/2018 στις 14:30
πηγή χρήστη

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