SQLite 内连接 - 使用另一个表中的值进行更新

SQLite inner join - update using values from another table(SQLite 内连接 - 使用另一个表中的值进行更新)
本文介绍了SQLite 内连接 - 使用另一个表中的值进行更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这很简单,已被多次询问,但我无法让它发挥作用.我认为应该起作用的 SQL 查询是:

This is quite easy and has been asked multiple times but I can't get it to work. The SQL query I think should work is:

    UPDATE table2
       SET dst.a = dst.a + src.a,
           dst.b = dst.b + src.b,
           dst.c = dst.c + src.c,
           dst.d = dst.d + src.d,
           dst.e = dst.e + src.e
      FROM table2 AS dst 
INNER JOIN table1 AS src
        ON dst.f = src.f

推荐答案

使用更新语句是不可能的,因为在 sqlite 中不支持更新语句中的联接.请参阅文档:更新声明

Using the update statement it is not possible because in sqlite joins in an update statement are not supported. See docs: update statement

如果您只想将单个列更新为静态值,您可以在更新语句中正确使用子查询.请参阅此示例:如何进行更新在 SQLite 上加入表时?

If you only wanted to update a single column to a static value, you could use a subquery in the update statement correctly. See this example: How do I make an UPDATE while joining tables on SQLite?

现在在您的示例中,假设列 f"上有一个唯一键 - 我想出的解决方法/解决方案是使用替换语句:

Now in your example, making an assumption that there is a unique key on "column f" - a workaround/solution I have come up with is using the replace statement:

replace into table2
(a, b, c, d, e, f, g)
select src.a, src.b, src.c, src.d, src.e, dest.f, dest.g
from table1 src
inner join table2 dest on src.f = dest.f

我还在 table2列 g"中添加了一个额外的列,以显示您如何使用此方法仅更新"某些列.

I also added an extra column to table2 "column g" to show how you'd "update" only some of the columns with this method.

另一件需要注意的事情是,如果您使用PRAGMA foreign_keys = ON;"由于该行被有效地删除和插入,因此可能会出现问题.

One other thing to be cautious about is if you use "PRAGMA foreign_keys = ON;" it's possible to have issues with this as the row is effectively deleted and inserted.

这篇关于SQLite 内连接 - 使用另一个表中的值进行更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)