SQL: Eine Abfrage einfügen neuen Datensatz oder ersetzen nur einige Felder

Meine Datenbank ist SQLite, aber ich bin sicher, die Frage gilt für SQL im Allgemeinen. Sagen wir, ich habe eine Tabelle "Schüler" mit den Spalten "id" (Primärschlüssel), "name", "ausgewählt". Von Zeit zu Zeit, die ich brauche zu aktualisieren, sagt die Tabelle aus der externen Quelle, aber ich erhalten nur eine Tabelle von ids und Namen. Wenn diese Aktualisierung erfolgt für jede Zeile, die ich brauche, um:

  1. Wenn keine Zeile mit der gleichen id vorhanden ist, fügen Sie neue Zeile, um der Tabelle mit default-Wert für "ausgewählte"

  2. Wenn die Zeile bereits vorhanden ist, aktualisieren Sie nur "name" - Feld, untouching "ausgewählt"

Sollte dies in einem batch mit einer einzigen Abfrage mit Platzhaltern. Auch, der Fall ist, vereinfacht, eigentlich muss ich schreiben, universellen code für die Aktualisierung einer Reihe von Tabellen, die jeweils mehrere Felder aktualisiert werden und einige "lokale" - Felder.

Leider, ich kann nicht finden einen geeigneten Weg, um auszudrücken, meinen Wunsch zu SQLite. Wenn ich ERSETZEN-Abfrage:

INSERT OR REPLACE INTO students (id, name) VALUES (:id, :name)

diese beseitigen den "ausgewählten" Bereich, während, wenn ich UPDATE:

UPDATE students SET name = :name WHERE id = :id

diese wird nicht fügen Sie neue Zeilen.

Also, was ist der richtige Weg, es zu tun? Bekam ich das Gefühl, mir fehlt etwas sehr-sehr einfach, und ich werde mich sehr, sehr dumm, wenn ich die Antwort bekommen 🙂

InformationsquelleAutor Septagram | 2011-01-13
Schreibe einen Kommentar