我有一個主表:
ID first_name last_name designation
--------------------------------------------------------
1 A1 Z1 Student
2 A2 Z2 HOD,Professor
3 A3 Z3 Professor
我又創建了 2 個表(名稱和名稱)來滿足 1NF。
姓名表:
ID first_name last_name
-------------------------
n_1 A1 Z1
n_2 A2 Z2
n_3 A3 Z3
代號表:
designation_code designation
-----------------------------
D_101 Student
D_102 HOD
D_103 Professor
由于包含兩個表的主鍵的多對多關系,我創建了一個連接表。目前我的連接表是空的。
名稱指定表:
ID designation_code
----------------------
我知道我們可以手動插入記錄,但我在兩個表中都有 1000 條記錄。如何使用 INSERT 查詢一次性在聯結表中插入數百萬條記錄,使最終結果如下所示?
名稱指定表:
ID designation_code
----------------------
n_1 D_101
n_2 D_102
n_2 D_103
n_3 D_103
uj5u.com熱心網友回復:
insert into name_designation_table
select
n.ID,
d.designation_code
from
main_table m
inner join name_table n on n.first_name = m.first_name and n.last_name = m.last_name
inner join designation_table d on d.designation = m.designation
但是這種方法有一個缺陷——first_name和last_name值的組合在您的 main_table 中可能不是唯一的。名字和姓氏相同的人可能不止一個。您必須找到更多列來唯一標識一個人,例如出生日期或社會安全號碼。
uj5u.com熱心網友回復:
在現代版本的 SQL Server 中,您可以CROSS APPLY STRING_SPLIT為此使用
INSERT name_designation (ID, designation_code)
SELECT m.ID, d.designation_code
FROM main m
CROSS APPLY STRING_SPLIT(m.designation, ',') s
JOIN designation d on d.designation = s.value;
然后您可以擺脫,main因為所有資訊現在都存盤在其他三個表中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/389560.html
標籤:sql sql-server 查询语句 sql 插入 连接表
上一篇:大量連接行的日期比較緩慢
