2016-04-10 6 views
0

別の10行のテーブル(newdb.Peeps)から10行のテーブル(olddb.People)で更新を実行しようとしています。Sqlite3 Updateターゲットテーブルの単一行の値を挿入します

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 

ご覧のとおり、olddb.Peopleのすべての行は、newdb.Peepの最初の行の値で更新されます。

私の意図は、行の最初の値(unix)を使って、newdb.Peeps内の対応する行の値でolddb.Peopleの各行を更新することです。

ありがとうございました。

答えて

0

olddb.Peopleunixが不足しています。したがって、最も内側のテーブルにデフォルト設定されているため、WHERE newdb.Peeps.unix = newdb.Peeps.unixを間違って実行しています。

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

それでした。適時の対応をありがとう。タイトルを[SOLVED]などに変更する必要がありますか? –

+0

現状のままにすることはできません。あなたが答えを受け入れたので、それは暗黙のうちに解決され、そのまま表示されます。 –

関連する問題