我有一个包含2列(value1,value2)的表格,其中包含CSV格式的值。我想创建一个tableB,其字段与tableA相同,但在这两列中,只有一个极限值(注意我不知道逗号之间有多少个字符)。此“限制”是CSV的第一个 n 元素。
表A
+----+----------+----------------------+----------------------+
| id | other | value1 | value2 |
+----+----------+----------------------+----------------------+
| 1 | other1 | 111,222,333,444 | 1616,17,1,8,19,2020 |
| 2 | other2 | 55,6,7777,8,9 | 21,22,23 |
| 3 | other3 | 10101,11.11,13,14,15 | 242424,2525,26,27 |
+----+----------+----------------------+----------------------+
表B(限制为3个元素)
+----+----------+----------------------+----------------------+
| id | other | value1 | value2 |
+----+----------+----------------------+----------------------+
| 1 | other1 | 111,222,333 | 1616,17,1 |
| 2 | other2 | 55,6,7777 | 21,22,23 |
| 3 | other3 | 10101,11.11,13 | 242424,2525,26 |
+----+----------+----------------------+----------------------+
我没有提到那些表有大量的元素(以及许多其他列,如“其他”)。因此我更喜欢使用:
create table tableB LIKE tableA;
INSERT tableB SELECT * FROM tableA;
然后更新value1和value2(在2个不同的事务中 - 事实上我有91个这样的列)。这可能比单个查询中包含所有值的“创建表”更有效...
SQLFiddle:
答案 0 :(得分:2)
您可以使用MySQL的SUBSTRING_INDEX()
功能以及CREATE TABLE ... SELECT
:
CREATE TABLE TableB
SELECT id,
other,
SUBSTRING_INDEX(value1, ',', 3) AS value1,
SUBSTRING_INDEX(value2, ',', 3) AS value2
FROM TableA
在sqlfiddle上查看。