我有一个名为test.db的Sqlite数据库,它包含两个结构如下的表:
表1:ID INTEGER PRIMARY KEY AUTOINCREMENT,名称varchar(500),颜色varchar(500)
表2:ID INTEGER PRIMARY KEY AUTOINCREMENT,Name varchar(500),Smell varchar(500)
我正在尝试使用以下代码连接两个表
con = sqlite3.connect('test.db')
with con:
cur = con.cursor()
cur.execute("SELECT Color, Smell FROM Table1, Table2 WHERE Table1.Name = Table2.Name")
但是,我失败了,因为Table1.Name插入了不可见的换行符“\ n”,而Table2.Name则没有,所以WHERE子句不起作用。
有没有办法稍微修改SELECT语句,以便Table1.Name = Table2.Name可以工作?或者我必须重新生成Table1以删除“\ n”,但我不知道如何?
答案 0 :(得分:3)
使用replace()
SQL函数:
cur.execute("SELECT Color, Smell FROM Table1, Table2 "
"WHERE replace(Table1.Name, '\n', '') = Table2.Name")
您可以更新整个Table
Name
列,以完全删除换行符:
cur.execute("UPDATE Table1 SET Name = replace(Name, '\n', '') "
"WHERE Name like '%\n%'")
答案 1 :(得分:0)
您应该做的第一件事是修复表格,以便数据适合您的应用程序。您的表格Apple\n
列中似乎有name
这样的数据。
运行此查询以修复您的表:
UPDATE Table1 SET Name = rtrim(Name,'\n')
这将从每行\n
列的值右侧删除所有Name
,然后更新该行。
编辑:
@Martijn的答案将允许您的查询工作(假设您没有Table2.Name
的相同问题),但您应该真正修复表中的数据,以便您不必记住执行这些变通办法每次。