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

时间:2014-11-28 16:50:40

标签: mysql sql join sql-update

我的一位朋友刚问我这个问题,我不确定答案。

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

例如,我们有P.table_aP.table_btable_atable_b被“加入”了。我可以从返回的(已加入的)结果中更新table_a,并让原始table_a反映此更改吗?或者联接是否复制了表格,以便任何编辑只影响JOIN的结果?我倾向于第一种选择,但我不是百分百肯定。

1 个答案:

答案 0 :(得分:2)

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

  • 许多数据库直接在join语法中支持update。在这种情况下,您只需使用明确的update撰写join

  • 许多数据库都支持merge语句。在这种情况下,merge的行为很像update并允许join s。

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

  • 某些数据库支持物化视图。这些是视图(可以连接表)。当基础数据发生变化时,物化视图将发生变化。

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

编辑:

再一次,我不知道你的意思。我能想到的唯一正式用途"虚拟表"是SQLite中用于引用外部数据源的特定机制。

也许你真正想要的只是一个观点。这是标准的,基本上可用于所有数据库。视图定义可以包含连接。执行视图时,结果来自最新版本的基础表。没有"更新"参与;当执行引用它的查询时,以某种方式执行定义视图的查询。