SQL - 如何通过替换记录 ID 来插入-select?
SQL - How to Insert-select with replacing of record id?
我想执行 insert-select 将数据从一个 table 复制到另一个,但同时更改(除其他外)记录 ID。
record_id
是一个 sys_guid
,因此每一行都不同 - 如何在将一个 table 复制到另一个时替换它?
我现在得到的是:
insert into TABLE_NEW (record_id, date_time, name, xml_record, meta_data)
select
record_id,
replace (date_time,'12.02.18','12.03.18'),
name,
replace (xml_record,'cats','dogs'),
replace (meta_data,'human','alien')
from
TABLE_FROM
WHERE ROWNUM <= 500;
执行两次是行不通的,因为 record_id
有一个唯一的约束(以及没有 null,没有默认数据)- 如何克服这个问题?
PS: 如果这可能有帮助,它是一个 oracle 数据库。
使用sys_guid()
怎么样?
insert into TABLE_NEW (record_id, date_time, name, xml_record, meta_data)
select sys_guid() as record_id,
replace(date_time, '12.02.18', '12.03.18'),
name,
replace xml_record,'cats','dogs'),
replace(meta_data,'human','alien')
from TABLE_FROM
where rownum <= 500;
换成这个
Insert into TABLE_NEW (record_id, date_time, name, xml_record, meta_data)
select
record_id,
replace (date_time,'12.02.18','12.03.18'),
name,
replace (xml_record,'cats','dogs'),
replace (meta_data,'human','alien')
from
TABLE_FROM b
WHERE ROWNUM <= 500 and not exists (select a.record_id from table_new a where a.record_id=b.record_id)
exists 语句检查它是否在新的 table
我想执行 insert-select 将数据从一个 table 复制到另一个,但同时更改(除其他外)记录 ID。
record_id
是一个 sys_guid
,因此每一行都不同 - 如何在将一个 table 复制到另一个时替换它?
我现在得到的是:
insert into TABLE_NEW (record_id, date_time, name, xml_record, meta_data)
select
record_id,
replace (date_time,'12.02.18','12.03.18'),
name,
replace (xml_record,'cats','dogs'),
replace (meta_data,'human','alien')
from
TABLE_FROM
WHERE ROWNUM <= 500;
执行两次是行不通的,因为 record_id
有一个唯一的约束(以及没有 null,没有默认数据)- 如何克服这个问题?
PS: 如果这可能有帮助,它是一个 oracle 数据库。
使用sys_guid()
怎么样?
insert into TABLE_NEW (record_id, date_time, name, xml_record, meta_data)
select sys_guid() as record_id,
replace(date_time, '12.02.18', '12.03.18'),
name,
replace xml_record,'cats','dogs'),
replace(meta_data,'human','alien')
from TABLE_FROM
where rownum <= 500;
换成这个
Insert into TABLE_NEW (record_id, date_time, name, xml_record, meta_data)
select
record_id,
replace (date_time,'12.02.18','12.03.18'),
name,
replace (xml_record,'cats','dogs'),
replace (meta_data,'human','alien')
from
TABLE_FROM b
WHERE ROWNUM <= 500 and not exists (select a.record_id from table_new a where a.record_id=b.record_id)
exists 语句检查它是否在新的 table