2016-04-10 5 views
0

Ich versuche, ein Update für eine 10-zeilige Tabelle (olddb.People) aus einer anderen 10-Zeilentabelle (newdb.Peeps) auszuführen.Sqlite3 Update Fügt die Werte einer einzelnen Zeile für die Zieltabelle ein

sqlite> ATTACH DATABASE 'D:/tutorial2.db' AS olddb; 
sqlite> ATTACH DATABASE ':memory:' as newdb; 
sqlite> CREATE TABLE IF NOT EXISTS newdb.Peeps(unix INT, datestamp INT, value INT); 
sqlite> INSERT INTO newdb.Peeps SELECT * FROM olddb.People; 
sqlite> UPDATE newdb.Peeps SET datestamp = 20, value = 45 WHERE unix = 10; 
sqlite> UPDATE newdb.Peeps SET datestamp = 20, value = 45 WHERE unix = 14; 
sqlite> SELECT * FROM olddb.People; 
10|150|5 
11|165|5.5 
12|180|6 
13|195|6.5 
14|210|7 
15|225|7.5 
16|240|8 
17|255|8.5 
18|270|9 
19|285|9.5 
sqlite> SELECT * FROM newdb.Peeps; 
10|20|45 
11|165|5.5 
12|180|6 
13|195|6.5 
14|20|45 
15|225|7.5 
16|240|8 
17|255|8.5 
18|270|9 
19|285|9.5 
sqlite> UPDATE olddb.People SET datestamp = (SELECT datestamp FROM newdb.Peeps WHERE unix = newdb.Peeps.unix), value = (SELECT value from newdb.Peeps WHERE unix = newdb.Peeps.unix); 
sqlite> SELECT * FROM olddb.People; 
10|20|45 
11|20|45 
12|20|45 
13|20|45 
14|20|45 
15|20|45 
16|20|45 
17|20|45 
18|20|45 
19|20|45 
sqlite> SELECT * FROM newdb.Peeps; 
10|20|45 
11|165|5.5 
12|180|6 
13|195|6.5 
14|20|45 
15|225|7.5 
16|240|8 
17|255|8.5 
18|270|9 
19|285|9.5 

Wie Sie alle Zeilen von olddb.People sehen können, sind mit den Werten aus der ersten Reihe von newdb.Peeps aktualisiert.

Meine Absicht ist es, jede Zeile in Olddb.People mit den Werten aus den entsprechenden Zeilen in Newdb.Peeps mit dem ersten Wert (Unix) der Zeile zu aktualisieren.

Vielen Dank für Ihre Hilfe.

Antwort

0

Sie fehlen Qualifier olddb.People für unix. Daher ist es standardmäßig die innerste Tabelle, so dass Sie versehentlich WHERE newdb.Peeps.unix = newdb.Peeps.unix tun.

UPDATE olddb.People 
    SET datestamp = 
     (SELECT datestamp FROM newdb.Peeps WHERE olddb.People.unix = newdb.Peeps.unix) 
    , value = 
     (SELECT value from newdb.Peeps WHERE olddb.People.unix = newdb.Peeps.unix); 
+0

Das war es. Danke für die rechtzeitige Antwort. Soll ich den Titel zu [Gelöst] oder etwas Ähnliches ändern? –

+0

Nein, lass es so wie es ist. Wenn Sie eine Antwort akzeptiert haben, wird sie implizit als solche gelöst und angezeigt. –

Verwandte Themen