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(ソリューション):

SQLフィドル:

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 に答える