まず事を、。発見したように、個々のフィールドを操作することが難しくなります。あなたがしなければならないのは、新しい主キーとなるautoincrement bigintカラムをそのテーブルに追加することです.3カラムの一意性制約は一意のインデックスにすることができます。それはより良い実行する必要があります...しかし、それはまた、同様に必要な操作の種類を行うことができます。それはあなたが修正を行うことができますが、依然として整数インデックスで元の行を識別させます。
これを行うと、一時的なテーブルを作成する気にならない限り、「ワンタイム更新」を安全に行うことができるようになりました。
ユニーク 3列のインデックスを持たない同じスキーマでいくつかの一時テーブルを作成します。ユニークでないインデックスを持つことができます実行する。
処理する必要があるレコードを最初のテーブルにコピーします(ユニークな整数プライマリキーを含む)。
一時テーブルで更新する必要があるすべてのdetail
列を更新します。
とSUM
とGROUP BY
を使用して、これらのレコードを2番目のテーブルにマージします。
INSERT INTO temp2 (...whatever...) SELECT ...whatever..., SUM(no) FROM temp1 GROUP BY ...whatever...
最後に、(整数主キーを使用して)元のテーブルからTEMP1テーブルのすべてのレコードを削除し、元のテーブルにTEMP2テーブルのレコードを挿入します。
あなたは明確にすることができますか?私は 'name = A、date = B、detail = C、no = 23'と' name = A、date = B、detail = D、no = 45'という2つの行があると仮定しています。したがって、2番目の行のディテールをCに更新すると、2つの行は 'name = A、date = B、detail = C、no = 68'の1行になります。しかし、 'name'と' date'フィールドも一致している場合のみです。 –
そうです。実際にはこれらの行をマージしています。 – DrXCheng
あなたの他の質問からは、これは「2列ではない」と推測していますが、詳細フィールドをすべて*より単純なものに変更することを目指しています(LIKEを使用する必要はありません)。すべての合併が起こるのですか? –