mysql - 从两个连接表更新单个表 (SQL)

标签 mysql sql join sql-update

我的一个 friend 刚刚问了我这个问题,我不确定答案。

是否可以更新使用 JOIN 添加到另一个表的单个表?

例如,我们有 P.table_aP.table_btable_atable_b 已“连接”。我可以根据返回的(连接)结果更新 table_a 并让原始 table_a 反射(reflect)此更改吗?或者联接是否会复制表,以便任何编辑仅影响联接的结果?我倾向于第一种选择,但我不是 100% 确定。

最佳答案

你的问题有点不清楚。但普遍的答案是"is"。以下是一些机制:

  • 许多数据库支持直接在 update 语法中加入join。在这种情况下,您只需使用显式 join 编写 update 即可。

  • 许多数据库都支持merge 语句。在这种情况下,合并的行为很像更新并允​​许加入

  • 许多数据库支持 View 触发器。在这种情况下,您可以在 View 上编写更新触发器。当它被执行时,触发器就可以更新 View 。

  • 某些数据库支持物化 View 。这些是 View (可以有连接表)。当底层数据发生变化时,物化 View 也会发生变化。

可能还有我遗漏的其他方法。毫无疑问,您使用的任何数据库都至少支持其中之一。

编辑:

再说一次,我不明白你的意思。我能想到的“虚拟表”的唯一正式用途是 SQLite 中引用外部数据源的特定机制。

也许您真正想要的只是风景。这是标准的,基本上在所有数据库中都可用。 View 定义中可以有联接。执行 View 时,结果来自基础表的最新版本。不涉及“更新”;当引用 View 的查询被执行时,定义 View 的查询也会被执行(以某种方式)。

关于mysql - 从两个连接表更新单个表 (SQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27193040/

相关文章:

php - php和mysql中的结果显示问题

mysql - 按匹配次数排序

php - 在mysql中查找最低日期(自定义)

mysql - MYSQL Join 中的 REGEXP 工作不正常

mysql - 我的 SQL 连接超过 5 个表

php - 根据所选州显示城市

mysql - 嵌入Debezium。尝试查看偏移文件的格式。不工作

mysql - 子查询中的Order By对外查询排序的影响

sql - Redmine:多次复制问题

mysql - 根据列内容生成多列