2017-07-15 58 views
1

我在SQLite浏览器中打开了一个数据库,并使用完全相同的模式(但不同的数据)连接了一个备份数据库。这个T-SQL更新命令的SQLite 3等效语法是什么

我现在希望将第一个数据库中的email地址替换为客户端id所匹配的备份数据库中的email地址。

在SQL Server中,我会写这样的事:

update tbl_customers 
set email = backup.tbl_customers.email 
from tbl_customers 
inner join backup.tbl_customers on backup.tbl_customers.id = tbl_customers.id 

我见过的其他SO职位,建议以下语法SQLite的,这似乎像它应该工作(和这些建议被标记为正确答案)。但是,这似乎将所有email地址设置为相应备份数据库中的第一个电子邮件地址 - 显然不是我想要的。

update tbl_customers 
set email = (select backup.tbl_customers.email 
      from backup.tbl_customers 
      where backup.tbl_customers.id = id) 

下面的语句“作品”在SQLite的,但显然它会覆盖在第一个数据库中的所有列从备份数据库中相应的行中的列。

INSERT OR REPLACE INTO tbl_customers 
    SELECT * 
    FROM backup.tbl_customers 

那么,如何只更新SQLite中的email地址?

+0

'backup.tbl_customers.id = id'总是为true,因为'id'指向同一个表。 –

+0

@CL。是的,谢谢这会工作:更新tbl_customers 设置电子邮件=(从备份.tbl_customers选择bc.email 作为bc其中bc.id = tbl_customers.id) –

回答

2

SQLite不支持updatejoin。但你可以这样做:

update tbl_customers 
    set email = (select bc.email 
       from backup.tbl_customers bc 
       where bc.id = tbl_customers.id 
       ) 
    where exists (select 1 
        from backup.tbl_customers bc 
        where bc.id = tbl_customers.id 
       ); 
相关问题