1

とを含むいくつかの列を持つMySQLテーブルがありidますcount。同じアイテムと、各行idに追加する必要のある番号がペアになっているExcelスプレッドシートを取得しました。count

たとえば、データのサブセットを次に示します。関連する列のみが表示されています。

| id  | count |
|-----+-------|
| ... | ...   |
| 348 | 165   |
| 347 | 364   |
| 346 | 381   |
| 345 | 6017  |
| ... | ...   |

そしてこれはExcelスプレッドシートからのデータです:

| id  | add   |
|-----+-------|
| ... | ...   |
| 348 | 3,766 |
| 347 | 386   |
| 346 | 860   |
| 345 | 0     |
| ... | ...   |

countそれぞれのフィールドとaddフィールドを組み合わせて、がidそのcountように更新され、テーブル内の他のすべての列が変更されないようにします。

| id  | count |
|-----+-------|
| ... | ...   |
| 348 | 3931  |
| 347 | 750   |
| 346 | 1241  |
| 345 | 6017  |
| ... | ...   |

MySQLでそれができることは知っていますが、手順がわかりません。Excelデータをエクスポートする必要がある形式は何ですか?CSV?TSV?「調整」ファイルをMySQLに読み込むにはどうすればよいですか?この種のUPDATEコマンドの構文は何ですか?

4

2 に答える 2

2

これは、いくつかの手順で行う必要があります。

  1. CREATETEMPORARY TABLE。_
  2. LOAD一時テーブルへのデータ
  3. UPDATE元のテーブル、 JOIN一時的なテーブルに対してを使用します。

CREATE [TEMPORARY] TABLE構文は簡単です。テーブルを作成するのと同じですが、セッションが終了すると消えます。表の形式は、更新する列と一致している必要があります。CREATE ... (SELECT...)これは、次の構文を使用して簡単に実行できます。

CREATE TEMPORARY TABLE `data_to_load` (
    SELECT
        `id`,
        `count`
    FROM
        `table_to_update`
    WHERE
        0
);

これにより、列およびとまったく同じ形式で構成される、TEMPORARY TABLEと呼ばれるが作成されます。は一致しないため、データではなく、テーブルの形式をコピーするだけです。data_to_loadtable_to_updateidcountWHERE 0

次に、LOADデータを取得します。形式は扱いにくいものではなく、指定するだけです。Excelで使用される標準のCSV形式の場合、コマンドは次のようになります。

LOAD DATA
    INFILE 'exported_data.csv'
    INTO TABLE `data_to_load`
    FIELDS
        TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '"'
        ESCAPED BY '"'
(
    `id`,
    `count`
);

最後に、新しいテーブルを使用してUPDATE、既存のデータを作成JOINします。

UPDATE
    `table_to_update`
    INNER JOIN `data_to_load`
        ON `data_to_load`.`id` = `table_to_update`.`id`
SET
    `table_to_update`.`count` = `table_to_update`.`count` + `data_to_load`.`count`
;
于 2012-10-08T20:19:03.163 に答える
1

このような手法を使用して、csvから値をインポートします。そのテーブルができたら、これを試してください。元のテーブルの名前が「counts」で、新しいテーブルの名前が「adds」の場合、このクエリは組み合わせがどのようになるかを示します。

select a.id,a.count,b.add,a.count + b.add as sum from counts as a, adds as b where a.id = b.id;

それがあなたが望むことをしているなら、それから更新してください:

update counts set counts.count = counts.count + adds.add where counts.id = adds.id;
于 2012-10-08T20:06:38.517 に答える