2016-04-10 2 views
0

Я пытаюсь запустить обновление в таблице из 10 строк (olddb.People) из другой таблицы из 10 строк (newdb.Peeps).Обновление Sqlite3 Вставляет значения одной строки для целевой таблицы

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.Peeps.

Мое намерение состоит в том, чтобы обновлять каждую строку в olddb.People со значениями из соответствующих строк в newdb.Peeps, используя первое значение (unix) строки.

Благодарим за помощь.

ответ

0

Вам не хватает квалификаторов olddb.People для unix. Таким образом, он по умолчанию соответствует самой внутренней таблице, поэтому вы ошибочно делаете 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

Не оставляйте это как есть. Поскольку вы приняли ответ, он неявно разрешен и отображается как таковой. –

Смежные вопросы