[英]How to loop through rows and columns in a DatagridView to insert their values in a mysql table
[英]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.