SQLITE
Ich habe 2 Tabellen "Quelle" und "Ziel", die die gleichen Felder haben. ID und LAND, obwohl beide auch andere Felder haben, die nicht gemeinsam sind.
Ich muss den Source.Country-Wert in das Destination.Country kopieren, in dem sich der Join in der ID befindet
Für mein Leben kann ich Sqlite nicht dazu bringen, dies zu tun.
In SQL Server usw. ist dies eine super einfache Aufgabe.
Ideen?
Antworten:
INSERT INTO Destination SELECT * FROM Source;
Eine formale Definition finden Sie unter SQL als von SQLite verstanden: INSERT .
quelle
SELECT
Abfrage leicht an Ihr tatsächliches Tabellenschema anpassen.SELECT
Abfrage in Klammern setzen, z. B.INSERT INTO users2(name, name2) VALUES ((SELECT name FROM users),(SELECT name2 FROM users));
Wenn in beiden Tabellen bereits Daten vorhanden sind und Sie die Werte einer Tabellenspalte basierend auf einer bestimmten Bedingung aktualisieren möchten, verwenden Sie diese Option
UPDATE Table1 set Name=(select t2.Name from Table2 t2 where t2.id=Table1.id)
quelle
Ich habe damit gerungen und weiß, dass es andere Möglichkeiten gibt, aber ich bin zu dem Schluss gekommen, dass das sicherste Muster ist:
create table destination_old as select * from destination; drop table destination; create table destination as select d.*, s.country from destination_old d left join source s on d.id=s.id;
Es ist sicher, weil Sie eine Kopie davon haben,
destination
bevor Sie sie geändert haben. Ich vermute, dass Update-Anweisungen mit Joins nicht in SQLite enthalten waren, da sie leistungsstark, aber etwas riskant sind.Wenn Sie das obige Muster verwenden, erhalten Sie zwei
country
Felder. Sie können dies vermeiden, indem Sie explizit alle Spalten angeben, aus denen Sie abrufen möchten,destination_old
und möglicherweise verwendencoalesce
, um die Werte abzurufen,destination_old
wenn dascountry
Feld insource
null ist. Also zum Beispiel:create table destination as select d.field1, d.field2,...,coalesce(s.country,d.country) country from destination_old d left join source s on d.id=s.id;
quelle
Wenn Sie solche Daten kopieren, bedeutet dies wahrscheinlich, dass Ihr Datenmodell nicht vollständig normalisiert ist, oder? Ist es möglich, eine Liste von Ländern zu erstellen und mehr beizutreten?
Anstelle eines JOIN können Sie auch virtuelle Tabellen verwenden, damit Sie die Abfragen in Ihrem System nicht ändern müssen.
quelle