SQLITE3中的跨表UPDATE

Gre*_*ley 9 sql sqlite

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

UPDATE tbl1 SET col2 = tbl2.col2 
FROM table1 tbl1 INNER JOIN table2 tbl2 ON tbl1.col1 = tbl2.col1
Run Code Online (Sandbox Code Playgroud)

我没有打扰一下,这是否是任何SQL标准或不的一部分,我敢肯定还有其他的方法来做到这一点,但它是令人叹为观止的有用.

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

Tre*_*son 22

这适用于sqlite:

UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)
Run Code Online (Sandbox Code Playgroud)

  • 如果您要从第二个表中的同一行设置多个列,则不是很有帮助. (2认同)
  • @Michael它完美地回答了他的问题,如果你想解决一个不同的问题,请问一个新问题. (2认同)
  • 但是,请注意,如果在 tbl2 中找不到匹配的行,这会将 tbl1 的 Col2 设置为 null。 (2认同)

小智 5

只是为了强调 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上的 cheetah 帖子,其中指向:

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;
Run Code Online (Sandbox Code Playgroud)

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