我在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
地址?
答案 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
);