簡體   English   中英

如何使用同一列中超過100列的多個列中的值插入行? 可能使用LOOP嗎?

[英]How to insert rows using values from mulitple columns in the same table where there are over 100 columns? Possible use LOOP?

在這里輸入代碼

可以說我有下表:

ID Name    ID2 ID3 ID4 ID100
1   Smith   2   3   4   100
20  Joe     10  20  30  200
30  Jane    40  50  60  300

我如何編寫一次一次通過ID2-ID100列並從列和Name列中獲取值並向表中添加新行的語句?

看起來像這樣:

ID Name    ID2 ID3 ID4 ID100
1   Smith   2   3   4   100
2   Smith               
3   Smith               
4   Smith               
100 Smith

我已經做到了,但是確實想寫100條選擇線。

INSERT INTO mytable
(ID, Name)
SELECT ID2, Name FROM mytable WHERE Name = 'Smith'
UNION ALL
SELECT ID3, Name FROM mytable WHERE Name = 'Smith'
UNION ALL
SELECT ID4, Name FROM mytable WHERE Name = 'Smith';

您的數據庫通過創建重復組而違反了“第一范式”。 RDBMS並非旨在干凈地處理此設計。 這就是為什么您不想創建重復組的原因。 除了重新設計之外,任何其他解決方案都將是丑陋且緩慢的。

如果不能進行重新設計,答案是做一次痛苦的事情,然后就不必再做一次。

創建以下視圖:

CREATE VIEW MyUglyTable_Unpivot (ID, Name, Field_ID, Field_Value) AS
SELECT ID, Name, 'ID2',   ID2   FROM MyTable WHERE ID2   IS NOT NULL UNION ALL
SELECT ID, Name, 'ID3',   ID3   FROM MyTable WHERE ID3   IS NOT NULL UNION ALL
SELECT ID, Name, 'ID4',   ID4   FROM MyTable WHERE ID4   IS NOT NULL UNION ALL
SELECT ID, Name, 'ID5',   ID5   FROM MyTable WHERE ID5   IS NOT NULL UNION ALL
SELECT ID, Name, 'ID6',   ID6   FROM MyTable WHERE ID6   IS NOT NULL UNION ALL
SELECT ID, Name, 'ID7',   ID7   FROM MyTable WHERE ID7   IS NOT NULL UNION ALL
SELECT ID, Name, 'ID8',   ID8   FROM MyTable WHERE ID8   IS NOT NULL UNION ALL
SELECT ID, Name, 'ID9',   ID9   FROM MyTable WHERE ID9   IS NOT NULL UNION ALL
...
SELECT ID, Name, 'ID99',  ID99  FROM MyTable WHERE ID99  IS NOT NULL UNION ALL
SELECT ID, Name, 'ID100', ID100 FROM MyTable WHERE ID100 IS NOT NULL

顯然,您可以為視圖和字段選擇更合理的名稱。 如果基礎表在這些字段上NOT NULL約束,則WHERE XXXX IS NOT NULL ,但以我的經驗來看,它們不是。 如果您知道確實需要顯式的NULL值,也可以將其省略,但這通常被認為是較差的設計。 NULL太含糊。

視圖將像地獄般緩慢,但是它將使您更輕松地執行此類操作。 如果您能夠重新設計系統以不使用重復組,則強烈建議您這樣做。

現在您可以執行以下操作:

INSERT INTO MyTable (ID, Name)
SELECT Field_Value, Name FROM MyUglyTable_Unpivot
WHERE Name = 'Smith'

雖然,我認為您需要在MyTable某個位置具有Field_ID才能使這一切有意義。

如果您使用外鍵概念,則可以使用excel來寫那些選擇

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM