10

SQL Server,我可以做这样的事情:

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

我没有费心去看看这是否是任何 SQL 标准的一部分,我确信还有其他方法可以做到这一点,但它非常有用

这是我的问题。我需要用 SQLITE3在 SQL(即,不是宿主语言)中做类似的事情。可以做到吗?

4

4 回答 4

23

这适用于 sqlite:

UPDATE tbl1 SET col2 = (SELECT col2 FROM tbl2 WHERE tbl2.col1 = tbl1.col1)
于 2010-03-24T17:24:20.407 回答
4

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

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

请参阅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;

and this seems to work correctly. There seem to be many posts at different sites that recommend the first approach so it is a bit confusing. I would suggest you test your output very carefully if you use this method which does seem faster and may work with matched tables.

于 2013-01-01T21:03:00.497 回答
1

我发现这可以用INSERT OR REPLACE INTO. 比 T-SQL 的等价物更冗长,但同样方便。

于 2008-11-30T19:22:16.417 回答
1

值得一提的是,Microsoft SQL Server 和 MySQL 是唯一支持多表更新的数据库品牌,而且各自使用的语法也不相似。

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

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

于 2008-11-30T21:37:51.777 回答