SQL 迁移:使用外键将 table 拆分为两个 table
SQL Migrate: Split table into two tables with foreign key
如何 SQL 将以下 table 迁移到两个带有外键的拆分 table 中。
当前 table:
编号 |姓名 |值1 |值2 | VAL3
----------------------------------
1102 |约翰 | 100 | 200 | 300
1103 |凯特 | 110 | 210 | 310
目标 tables:
编号 |姓名 | VAL_ID ID |值1 |值2 | VAL3
--------------------------------------------
1102 |约翰 | 1 1 | 100 | 200 | 300
1103 |凯特 | 2 2 | 110 | 210 | 310
嗯。 . .
create table t1 as
select id, name, row_number() over (order by id) as val_id
from t;
create table t2 as
select t1.val_id, val1, val2, val3
from t join
t1
on t.name = t1.name;
我认为没有理由在可以使用 ID 时生成 VAL_ID,这也是此用例的常见做法。
create table base_table as select id,name from src;
alter table base_table add primary key (id);
create table values_table as select id,val1,val2,val3 from src;
alter table values_table add primary key (id);
alter table values_table add foreign key (id) references base_table(id);
只是为了满足OP:
create table base_table as select id,name,row_number()over(order by id) as val_id from src;
alter table base_table add primary key (id);
alter table base_table add unique (val_id);
create table values_table as select row_number()over(order by id) as id,val1,val2,val3 from src;
alter table values_table add primary key (id);
alter table values_table add foreign key (id) references base_table(val_id);
如何 SQL 将以下 table 迁移到两个带有外键的拆分 table 中。
当前 table:
编号 |姓名 |值1 |值2 | VAL3 ---------------------------------- 1102 |约翰 | 100 | 200 | 300 1103 |凯特 | 110 | 210 | 310
目标 tables:
编号 |姓名 | VAL_ID ID |值1 |值2 | VAL3 -------------------------------------------- 1102 |约翰 | 1 1 | 100 | 200 | 300 1103 |凯特 | 2 2 | 110 | 210 | 310
嗯。 . .
create table t1 as
select id, name, row_number() over (order by id) as val_id
from t;
create table t2 as
select t1.val_id, val1, val2, val3
from t join
t1
on t.name = t1.name;
我认为没有理由在可以使用 ID 时生成 VAL_ID,这也是此用例的常见做法。
create table base_table as select id,name from src;
alter table base_table add primary key (id);
create table values_table as select id,val1,val2,val3 from src;
alter table values_table add primary key (id);
alter table values_table add foreign key (id) references base_table(id);
只是为了满足OP:
create table base_table as select id,name,row_number()over(order by id) as val_id from src;
alter table base_table add primary key (id);
alter table base_table add unique (val_id);
create table values_table as select row_number()over(order by id) as id,val1,val2,val3 from src;
alter table values_table add primary key (id);
alter table values_table add foreign key (id) references base_table(val_id);