使用sqlite3和python更新表中现有列的值

时间:2018-10-12 16:10:49

标签: python sql sqlite

我正在尝试将table2中的列添加到现有table1中。

table1看起来像这样(这是一个2列的示例,但实际上我有100多个):

id | item | price
-------------
 1 | book | 20  
 2 | copy | 30   
 3 | pen  | 10 

和这样的table2:

id | item 
----------
 1 | book 
 2 | copy 
 3 | pen  

我想得到这个:

id | item | price | item 
---------------------
 1 | book | 20    | book  
 2 | copy | 30    | copy   
 3 | pen  | 10    | pen  

但是,我得到的都是相同的第一行值:

id | item | price | item 
---------------------
 1 | book | 20    | book  
 2 | copy | 30    | book   
 3 | pen  | 10    | book  

我在代码中做错了什么?

con = sqlite3.connect(":memory:")
cur = con.cursor()

cur.execute("ALTER TABLE table1 ADD COLUMN item text")
cur.execute("UPDATE table1 SET item = (SELECT item FROM table2 WHERE table2.id = id)")

谢谢!

1 个答案:

答案 0 :(得分:0)

您需要一个相关子查询:

UPDATE table1
    SET item = (SELECT t2.item FROM table2 t2 WHERE t2.id = table1.id);

我很惊讶您的版本没有返回错误。 WHERE条件被解释为WHERE table2.id = table2.id,这意味着应该返回所有行。