这个T-SQL Update命令

时间:2017-07-15 12:00:58

标签: sql sql-server sqlite

我在SQLite浏览器中打开了一个数据库,并附加了一个具有完全相同模式(但数据不同)的备份数据库。

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

在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地址?

1 个答案:

答案 0 :(得分:2)

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

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
                 );