古いデータを次の場所から移動しようとしています:
this_table >> this_table_archive
すべての列をコピーします。私はこれを試しましたが、機能しません:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
注:テーブルは同一でありid
、主キーとして設定されています。
古いデータを次の場所から移動しようとしています:
this_table >> this_table_archive
すべての列をコピーします。私はこれを試しましたが、機能しません:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
注:テーブルは同一でありid
、主キーとして設定されています。
正しい構文は、マニュアルに記載されています。これを試して:
INSERT INTO this_table_archive (col1, col2, ..., coln)
SELECT col1, col2, ..., coln
FROM this_table
WHERE entry_date < '2011-01-01 00:00:00';
id列が自動インクリメント列であり、両方のテーブルにすでにいくつかのデータがある場合は、元の列にすでに存在するIDを挿入しないように、列リストからidを省略して、代わりに新しいIDを生成したい場合があります。テーブル。ターゲットテーブルが空の場合、これは問題になりません。
構文については、次のようになります(列リストを省略して、暗黙的に「すべて」を意味します)
INSERT INTO this_table_archive
SELECT *
FROM this_table
WHERE entry_date < '2011-01-01 00:00:00'
アーカイブテーブルにすでにデータがある場合に主キーエラーを回避するため
INSERT INTO this_table_archive
SELECT t.*
FROM this_table t
LEFT JOIN this_table_archive a on a.id=t.id
WHERE t.entry_date < '2011-01-01 00:00:00'
AND a.id is null # does not yet exist in archive
マークバイアーズへの追加回答:
ハードコードされた詳細を挿入したい場合もあります。そうでない場合は、一意性制約が失敗するなどの可能性があります。したがって、列の一部の値をオーバーライドするような状況では、次を使用してください。
INSERT INTO matrimony_domain_details (domain, type, logo_path)
SELECT 'www.example.com', type, logo_path
FROM matrimony_domain_details
WHERE id = 367
ここで、ドメイン値は、一意性制約を取り除くためにハードコードされた方法で私によって追加されます。
値ビットにdouble()は必要ありませんか?これを試さない場合(より良い方法があるはずですが)
insert into this_table_archive (id, field_1, field_2, field_3)
values
((select id from this_table where entry_date < '2001-01-01'),
((select field_1 from this_table where entry_date < '2001-01-01'),
((select field_2 from this_table where entry_date < '2001-01-01'),
((select field_3 from this_table where entry_date < '2001-01-01'));
INSERT INTO vendors (
name,
phone,
addressLine1,
addressLine2,
city,
state,
postalCode,
country,
customer_id
)
SELECT
name,
phone,
addressLine1,
addressLine2,
city,
state ,
postalCode,
country,
customer_id
FROM
customers;