创建新的SQLite表,将其他表中的列与sqlite3和python组合

时间:2018-10-11 19:41:20

标签: python sql sqlite

我正在尝试创建一个新表,该表合并了来自两个不同表的列。 假设我们有一个名为db.db的数据库,其中包含两个名为table1和table2的表。

table1看起来像这样:

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

和这样的table2(请注意具有重复的轴):

id | item | color
-------------
 1 | book | blue  
 2 | copy | red   
 3 | pen  | red 
 1 | book | blue  
 2 | copy | red   
 3 | pen  | red 

现在,我正在尝试创建一个名为new_table的新表,该表在同一轴上合并了价格和颜色列,并且没有重复项。我的代码如下(由于我的SQL技能很差,因此显然无法正常工作):

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

cur.execute("CREATE TABLE new_table (id varchar, item integer, price integer, color integer)")
cur.execute("ATTACH DATABASE 'db.db' AS other;")
cur.execute("INSERT INTO new_table (id, item, price) SELECT * FROM other.table1")
cur.execute("UPDATE new_table SET color = (SELECT color FROM other.table2 WHERE distinct(id))")
con.commit()

我知道最后一行代码中存在多个错误,但是我无法解决。您将如何解决此问题?谢谢!

1 个答案:

答案 0 :(得分:0)

类似

CREATE TABLE new_table(id INTEGER, item TEXT, price INTEGER, color TEXT);
INSERT INTO new_table(id, item, price, color)
  SELECT DISTINCT t1.id, t1.item, t1.price, t2.color
  FROM table1 AS t1
  JOIN table2 AS t2 ON t1.id = t2.id;

注意固定列的类型;你的很奇怪。项目和颜色为整数?

如果每个id值在新表中都是唯一的(只有一行的id为1,则只有2,依此类推),该列也可能也为INTEGER PRIMARY KEY。 / p>

编辑:另外,由于您是根据基于文件的附加数据库中的表在内存数据库中创建此表的,因此……也许您想要一个临时表?还是观点可能更合适?不确定您的目标是什么。