1

我有一个带有 CSV 格式值的 2 列(value1、value2)的 tableA。我想创建一个与 tableA 具有相同字段的 tableB,但是在这 2 列中,只有有限数量的值(请注意,我不知道逗号之间存在多少个字符)。这个“限制”是 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 个这样的列)。这可能比在单个查询中包含所有值的“创建表”更有效......


EDITED2(解决方案):

SQLFiddle:

http://sqlfiddle.com/#!2/2e73a/1

4

1 回答 1

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上查看。

于 2012-10-10T15:57:26.777 回答