如何在 PL/SQL 中连接两个表而不创建新表

Posted

技术标签:

【中文标题】如何在 PL/SQL 中连接两个表而不创建新表【英文标题】:How to join two tables in PL/SQL without creating a new one 【发布时间】:2019-10-11 11:37:20 【问题描述】:

我正在尝试在 PL/SQL 中加入两个表,但我不想创建另一个表。我想使用“ALTER TABLE”。

我想改变我的旧表并从另一个表中添加一列。我尝试使用 alter table 并创建新列,这是第二个表中的列。

ALTER TABLE TAB1
ADD VAR1 VARCHAR(30);
UPDATE TAB1 A
SET A.VAR1 = B.VAR1
WHERE EXISTS (SELECT VAR1 FROM TAB2 B WHERE A.ID = B.ID)

错误信息在“B.VAR1”中。

【问题讨论】:

那些被称为列,而不是“变量” 为什么要将相同的数据存储在两个单独的表中两次? 【参考方案1】:
update tab1 a set
  a.var1 = (select b.var1 
            from tab2 b
            where b.id = a.id
           )
where exists (select null
              from tab2 b
              where b.id = a.id
             );

或者:

merge into tab1 a
  using (select b.id, b.var1
         from tab2 b
        ) x
  on (x.id = a.id)
when matched then update set
  a.var1 = x.var1;

【讨论】:

一个问题刚刚在我脑海中闪过,如果我们谈论性能角度,UPDATE 或 MERGE 哪个会更快(忽略受影响的行数场景)? 我没有任何文档参考,但是 - 根据我自己的经验,MERGE 有时比 UPDATE 运行得更快,@Ankit。为了查明真相,应该比较解释计划。

以上是关于如何在 PL/SQL 中连接两个表而不创建新表的主要内容,如果未能解决你的问题,请参考以下文章

向模型 (edmx) 添加新表而不更新 Database First Entity Framework MVC 应用程序中的其他模型

PL/SQL 仅使用游标将 2 个表中的数据检索到新表中

如何创建临时表而不丢失 django 中的 ORM?

连接两个表而不根据连接条件过滤数据

面试题:合并两个已排序的单链表而不创建新节点

在 Oracle PL/SQL 中创建触发器时如何解决“编译错误成功”错误?