使用派生键值用另一个表的数据更新一个表

Posted

技术标签:

【中文标题】使用派生键值用另一个表的数据更新一个表【英文标题】:update one table with data from another using derived key value 【发布时间】:2018-07-22 01:07:03 【问题描述】:

表 1:

id    name    desc
------------------
1     a       abc
2     b       def
3     c       adf


Table 2:
name    desc
------------
x       123
y       345

如何运行 sql 更新查询,该查询可以使用表 2 的名称和 desc 使用表 1 的 id 和 table2 中的 rownum 更新表 1?可以假设table2中的rownum与表1的id相同。所以我得到的最终结果是

Table 1:

id    name    desc
------------------
1     x       123
2     y       345
3     c       adf

下面是创建表和插入记录的脚本

create table table1 (
  id number,
  name varchar2(10),
 desc_ varchar2(10)
);

create table table2 (
  name varchar2(10),
  desc_ varchar2(10)
);

insert into table1 values(1, 'a', 'abc');
insert into table1 values(2, 'b', 'def');
insert into table1 values(3, 'c', 'ghi');

insert into table2 values( 'x', '123');
insert into table2 values( 'y', '456');

归功于“update one table with data from another”

【问题讨论】:

【参考方案1】:

表中没有“rownum”之类的东西。 SQL 表表示 无序 集合,因此没有排序列就没有排序。

Oracle 确实提供了rowid 作为内置列标识符。这与rownum 不同,并且不保证是有序的。

可以使用rownum,但不保证该值具有任何特定含义,并且可能会在运行之间发生变化:

update table1
    set (name, desc) = (select name, desc
                        from (select t2.*, rownum as seqnum
                              from table2 
                             ) t2
                        where seqnum = table1.id
                       )
    where id <= (select count(*) from table2);

【讨论】:

你能解释一下为什么你有where子句"where id &lt;= (select count(*) from table2)"谢谢 @user2008558 。 . .这些表有不同的行数。您只想更新“第一” 行,其中 table2 中的行数。

以上是关于使用派生键值用另一个表的数据更新一个表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 用另一个表的主键值插入和替换值

用另一个 MySQL 表的值更新一个 MySQL 表(原始表的数据类型是 JSOn)

用另一个表数据更新字段

Mysql:用另一个表的选择最大值更新表[重复]

MySQL 用另一个表的值更新一个表 - 我可以在 bigquery 中使用它吗?

用另一个 MySQL 表的值更新一个 MySQL 表