目前,我有一個像T1中所示的表,我想將其拆分為單獨的Person表,如T2和一個PersonClientLink表,如T3。每個關系都作為其自己的唯一 ID 存盤在 T1 中。這使得同一個人及其客戶的重復變得困難。我需要將 T1 中的 Persons 分組為一個 ID,基本上將其轉換為 T2,并為他們在 T3 中的每個關系創建鏈接。T3 當前存在但為空,我想先根據 T1 中的資料填充 T3,然后將 T1 變成 T2。任何意見,將不勝感激 :)
T1 - 當前混亂
ID | Client_Id | 姓名 |
---|---|---|
1 | 5 | 鮑勃 |
2 | 6 | 鮑勃 |
3 | 7 | 格雷格 |
4 | 8 | 格雷格 |
T2 - 人
ID | 姓名 |
---|---|
1 | 鮑勃 |
2 | 格雷格 |
T3 - PersonClientLink
ID | Person_Id | Client_Id |
---|---|---|
1 | 1 | 5 |
2 | 1 | 6 |
3 | 2 | 7 |
4 | 2 | 8 |
老實說,我不知道從哪里開始......
uj5u.com熱心網友回復:
我將創建 T2 和 T3 表并從 T1 填充它們。之后我會放棄T1。下面是用postgresql做的,但應該是一樣的。postgresql 中的串行列與 sqlserver 中的標識列相同。
create table t2 (id serial primary key,
name varchar(32) not null);
create table t3 (id serial primary key,
person_id integer not null,
client_id integer not null);
創建一個從 t3.person_id 到 t2.id 的外鍵
填充 t2 和 t3:
insert into t2 (name) (select distinct name from t1);
insert into t3 (person_id,client_id) (
select t2.id,t1.client_id from t1,t2 where t2.name = t1.name);
如果 sqlserver 需要,將表的連接轉換為 ANSI 樣式。
初始資料(與您的相同)和結果:
select * from t1;
id | client_id | name
---- ----------- ------
1 | 5 | bob
2 | 6 | bob
3 | 7 | greg
4 | 6 | greg
(4 rows)
select * from t2;
id | name
---- ------
1 | bob
2 | greg
(2 rows)
select * from t3;
id | person_id | client_id
---- ----------- -----------
1 | 1 | 6
2 | 1 | 5
3 | 2 | 6
4 | 2 | 7
(4 rows)
我希望這有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522052.html
下一篇:求解二叉樹最大和所涉及的邏輯