【问题标题】:Sqlite3 Update Inserts a single row's values for target tableSqlite3 更新为目标表插入单行值
【发布时间】:2016-04-10 19:44:14
【问题描述】:

我正在尝试从另一个 10 行表 (newdb.Peeps) 对 10 行表 (olddb.People) 运行更新。

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 第一行的值进行了更新。

我的意图是使用 newdb.Peeps 中相应行的值更新 olddb.People 中的每一行,使用该行的第一个值(unix)。

感谢您的帮助。

【问题讨论】:

    标签: sql database sqlite sql-update


    【解决方案1】:

    您缺少unix 的限定符olddb.People。因此它默认为最里面的表,所以你错误地做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);
    

    【讨论】:

    • 就是这样。感谢您的及时回复。我应该将标题更改为 [SOLVED] 或类似名称吗?
    • 不要保持原样。当您接受答案时,它会被隐含地解决并显示出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多