3

たとえば、次のように言いましょう。

  • old_datanew_dataの 2 つのテーブルがあります。

  • old_datanew_dataの両方に、 this_is_colという 1 つの列があります。

  • old_datanew_dataの両方に、さまざまな (数百の) 日付の行 (2010-02-06、2010-01-09、2007-06-02 など) があります。両方のテーブルの日付は必ずしも同じではありませんが、形式は同じです。

  • 両方のテーブルのフィールドはさまざまな整数です。


私の仕事:

  • フィールドをold_dataからnew_dataにコピーします。

  • 両方のテーブルに日付が存在する場合、 new_dataのフィールドが置き換えられます。

  • 日付がnew_dataに存在しない場合、正しい行が追加され、フィールドがコピーされます。


これが私が得た距離です:

一時列を作成します。

ALTER TABLE `new_data` ADD `tempColumn` TEXT NULL;

old_dataからデータをコピー:

INSERT INTO `new_data` (`tempColumn`) SELECT `this_is_col` FROM `old_data`;

一時列とnew_dataを結合します。this_is_col . (ここまでたどり着いていないので、このステップを本当に理解していません)。

MERGE? `tempColumn` `this_is_col`;

一時テーブルを削除

ALTER TABLE `new_data` DROP `tempColumn`;

2 番目のアクション (データを一時列に転送する) を実行すると、次のエラーが発生します。

#1062 - Duplicate entry '0000-00-00' for key 1

そして今、私は立ち往生しています。どんな助けでも大歓迎です。MySQL と phpMyAdmin を使用して SQL コマンドをテストしています。

4

4 に答える 4

3

日付が一意のキーとしてインデックス化されていると仮定します。

INSERT INTO newtable
SELECT *
FROM oldtable
ON DUPLICATE KEY column1=oldcolumn1, ...
于 2010-07-19T21:29:30.397 に答える
0

INSERT ... ON DUPLICATE KEY UPDATEが必要です。あなたのソリューションはすでにタスクのステップ 1 と 3 を満たしています。ON DUPLICATE KEY UPDATE はステップ 2 を処理します。

于 2010-07-19T21:24:47.023 に答える
0

UPDATEandを実行するのはどうINSERTですか?

UPDATE new_data SET col=col 
FROM new_data a join old_data b on a.this_is_col = b.this_is_col

それで

INSERT INTO new_data (cols) SELECT cols 
FROM old_data WHERE this_is_col NOT IN (SELECT this_is_col FROM new_data)

誤解しなければ…

于 2010-07-19T21:27:50.990 に答える
0

更新するのではなく、最初に行を削除する場合: REPLACE

これも 1 行で済みます。データを置換して SELECT すると、テキスト列を追加するという奇妙なことをする必要はありません。

于 2010-07-19T21:30:18.943 に答える