5

テーブルに大量のレコードを挿入する必要があります。完全に正規化されていないため、ほとんどのフィールドが繰り返されます。

適切なコマンドは次のとおりです。

INSERT INTO table_name (field1, field2, ..., field_n) 
VALUES (value1, value2, ..., value_n),
    ...
    (value1, value2, ..., value_n)

しかし、いくつかの値を固定したまま、異なる値だけを示すことができるかどうか疑問に思っています。

代わりに言いましょう

INSERT INTO table_name (shop, month, sale)
VALUES (1, 2, 23),
    (1, 2, 28),
    (1, 2, 29),
    (1, 2, 30)

のようなものを持つ

INSERT INTO table_name (shop, month, sale)
VALUES (1, 2, 23), ... 28 / 29 / 30

それが不可能な場合は、ループや文字列のフィードなどを含むプロシージャを作成します。大きな問題にはなりませんが、INSERT INTO にプロシージャなしでこれを実行できる特殊性があるかどうかを知ることがポイントです。

4

3 に答える 3

3

次のようなことを試すことができます。

INSERT INTO table_name (shop, month, sale)
SELECT * FROM
(SELECT 1 as shop, 2 as month) as sm,
(SELECT 23 as sale UNION ALL SELECT 28 UNION ALL SELECT 30) as sales;
于 2013-02-05T13:01:09.013 に答える
1

insert into ステートメントで指定しない場合にデフォルト値を追加するデフォルト制約を使用できます。値を指定すると、その値が追加されます。

テーブルの列のデフォルト値を設定するだけです

ALTER TABLE tblname ALTER columnName SET DEFAULT 'value'

http://www.w3schools.com/sql/sql_default.aspを参照してください。

于 2013-02-05T11:31:44.277 に答える
1

一時テーブルを使用してさまざまな値を挿入してから、insert ... select を使用できます。それがあなたにとって大きな節約になるかどうかはわかりません:

CREATE TEMPORARY TABLE sale_temp (sale int);
INSERT sale_temp (sale) VALUES (23), (28), (29), (30);
INSERT INTO table_name (shop, month, sale)
SELECT 1, 2, sale
  FROM sale_temp;
DROP TABLE sale_temp;
于 2013-02-05T11:48:05.503 に答える