2016-07-30 24 views
1

Ich habe zwei Tabellen: defaults und Benutzer mit gleichen Spalten, außer in defaults die Spalte user_id einzigartig, während in „Benutzer“ ist es nicht.Insert oder Update mit ausgewählten und überschreiben nulls

Ich möchte von Benutzer alle Zeilen nehmen und legen Sie sie auf defaults, wenn zwei Reihen in Benutzer bekam die gleiche User_id, möchte ich sie in solcher Weise verschmelzen, dass alle leeren/Nullwerte wird mit nicht leer/null Werten

Hier außer Kraft gesetzt werden ist ein Beispiel

users 
----- 
user_id|name|email|address 
-------------------------- 
1  |abc |null |J St 
1  |coco|[email protected]|null 

nach dem defaults Einfügen ich das nächste Ergebnis erwarten:

defaults 
----- 
user_id|name|email|address 
-------------------------- 
1  |abc |[email protected]|J St 

@Eric B gab einen answer, wie dies zu tun mit Einsatz Werte:

Unter der Annahme, 3 Spalten in der Tabelle .. ID, Name, Rolle
Dies wird aktualisiert 2 von die Spalten. Wenn ID = 1 vorhanden ist, ist die ROLE nicht betroffen. Wenn ID = 1 nicht vorhanden ist, wird die Rolle auf "Benchwarmer" anstelle des Standardwerts festgelegt.

INSERT OR REPLACE INTO Employee (id, name, role) 
    VALUES ( 1, 
      'Susan Bar', 
      COALESCE((SELECT role FROM Employee WHERE id = 1), 'Benchwarmer') 
     ); 

Wie dies tun, wenn ich für meinen Einsatz wählen Sie verwenden

insert or replace into defaults select ??? from users 
+0

Welche sollte ausgewählt werden, wenn es mehrere Nicht-NULL-Werte gibt? –

+0

@ CL. es trifft mich nicht –

Antwort

1
INSERT OR REPLACE INT DEFAULTS VALUES (ID, Name, Role) 
    (
    SELECT ID, MAX(Name), MAX(Role) FROM Users GROUP BY ID 
); 

Die max wird der Maximalwert anstelle von null wählen, wenn es einen gibt.