我的一个 friend 刚刚问了我这个问题,我不确定答案。
是否可以更新使用 JOIN 添加到另一个表的单个表?
例如,我们有 P.table_a
和 P.table_b
。 table_a
和 table_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/