我的一位朋友刚问我这个问题,我不确定答案。
是否可以使用JOIN更新添加到另一个表的单个表?
例如,我们有P.table_a
和P.table_b
。 table_a
和table_b
被“加入”了。我可以从返回的(已加入的)结果中更新table_a
,并让原始table_a
反映此更改吗?或者联接是否复制了表格,以便任何编辑只影响JOIN的结果?我倾向于第一种选择,但我不是百分百肯定。
答案 0 :(得分:2)
你的问题有点不清楚。但一般的答案是"是"。以下是一些机制:
许多数据库直接在join
语法中支持update
。在这种情况下,您只需使用明确的update
撰写join
。
许多数据库都支持merge
语句。在这种情况下,merge
的行为很像update
并允许join
s。
许多数据库支持视图触发器。在这种情况下,您可以在视图上编写更新触发器。执行时,触发器可以更新视图。
某些数据库支持物化视图。这些是视图(可以连接表)。当基础数据发生变化时,物化视图将发生变化。
我可能遗漏了其他方法。毫无疑问,您使用的任何数据库都至少支持其中一个。
编辑:
再一次,我不知道你的意思。我能想到的唯一正式用途"虚拟表"是SQLite中用于引用外部数据源的特定机制。
也许你真正想要的只是一个观点。这是标准的,基本上可用于所有数据库。视图定义可以包含连接。执行视图时,结果来自最新版本的基础表。没有"更新"参与;当执行引用它的查询时,以某种方式执行定义视图的查询。