0

我有一个名为 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”,但我不知道如何?

4

2 回答 2

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%'")
于 2013-09-22T09:37:24.700 回答
0

您应该做的第一件事是修复您的表,以便数据对于您的应用程序是正确的。看起来Apple\n您的表格name列中有数据。

运行此查询以修复您的表:

UPDATE Table1 SET Name = rtrim(Name,'\n')

\n这将从每行中列的值的右侧删除所有内容Name,然后更新该行。

编辑:@Martijn 的回答将允许您的查询工作(假设您没有遇到同样的问题Table2.Name),但您应该真正修复表中的数据,这样您就不必每次都记住要执行这些变通办法。

于 2013-09-22T09:38:01.597 回答