別々のテーブルから2つの列を結合する
-
17-09-2020 - |
質問
たとえば、としましょう:
私は2つのテーブルを持っています: old_data と new_data.
両方 old_data と new_data と呼ばれる1つの列を持っている この_is_col.
両方 old_data と new_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 . この_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コマンドをテストしています。
解決
日付が一意のキーとして索引付けされていると仮定します:
INSERT INTO newtable
SELECT *
FROM oldtable
ON DUPLICATE KEY column1=oldcolumn1, ...
他のヒント
あなたが欲しい 挿入します。..重複キーの更新時.あなたの解決策はすでにあなたのタスクのステップ1と3を満たしています、重複キーの更新でステップ2の世話をします。
更新するのではなく、最初に行を削除する場合は、次のようにします: 置換
それはあまりにも一つの行になるだろうので、:REPLACE data SELECTを使用すると、テキスト列を追加して奇妙なことをする必要はありません。
どのようにちょうどやってはどうですか UPDATE
と 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)
私が誤解しない限り。..