使用派生键值用另一个表的数据更新一个表
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 <= (select count(*) from table2)"
谢谢
@user2008558 。 . .这些表有不同的行数。您只想更新“第一”table2
中的行数。以上是关于使用派生键值用另一个表的数据更新一个表的主要内容,如果未能解决你的问题,请参考以下文章
用另一个 MySQL 表的值更新一个 MySQL 表(原始表的数据类型是 JSOn)