SQLITE3中的跨表UPDATE

时间:2008-11-30 19:03:33

标签: sql sqlite

在SQL Server中,我可以这样做:

UPDATE tbl1 SET col2 = tbl2.col2 
FROM table1 tbl1 INNER JOIN table2 tbl2 ON tbl1.col1 = tbl2.col1

我没有费心去研究这是否是任何SQL标准的一部分,我确信还有其他方法可以做到这一点,但它令人惊讶有用。

这是我的问题。我需要使用SQLITE3在SQL (即非宿主语言)中执行类似的。可以吗?

4 个答案:

答案 0 :(得分:21)

这适用于sqlite:

UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)

答案 1 :(得分:2)

只是为了强调Geogory Higley的帖子:

我遇到了UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)的问题,它更新了tbl1中tbl2中不存在的列。

请参阅http://sqlite.phxsoftware.com/forums/p/1708/7238.aspx的猎豹帖子,该帖子指向:

http://www.mail-archive.com/sqlite-users@sqlite.org/msg27207.html

代码是:

insert or replace into foo (id, name, extra)
select bar.id, bar.name, foo.extra
from bar left join foo on bar.id = foo.id;

这似乎工作正常。在不同的网站上似乎有许多帖子推荐第一种方法,因此有点令人困惑。如果您使用这种方法看起来更快并且可以使用匹配的表格,我建议您非常仔细地测试输出。

答案 2 :(得分:1)

我发现可以使用INSERT OR REPLACE INTO完成此操作。比T-SQL的等价物更加冗长,但同样方便。

答案 3 :(得分:1)

对于它的价值,Microsoft SQL Server和MySQL是支持多表更新的唯一数据库品牌,每种使用的语法都不相似。

此功能不是标准SQL的一部分。因此,对多表更新(和删除)的支持是非标准的并且不受许多品牌支持也就不足为奇了。

无论如何,我很高兴你找到了适合你任务的解决方案。