![](/img/trans.png)
[英]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.