1

データベースの新しいテーブルにインポートした新しいデータセットがあります。古いテーブルから新しいテーブルにいくつかのフィールドをコピーする必要があります。新しいテーブルに新しいレコードまたは削除されたレコードがある可能性があるため、名前が一致する場合にのみ更新したいと思います。

これが私がこれまでに持っているものです。これは実行されますが、最初のレコードのみが更新されます。

update or ignore NEWDATA 
set CATEGORY=(select CATEGORY from OLDDATA), 
    KEY=(select KEY from OLDDATA) 
where Material=(select Material from OLDDATA);

私はignoreステートメントの有無にかかわらずそれを試しました。

どんな助けや提案も大歓迎です。前もって感謝します!!

4

2 に答える 2

0

必要なのは、更新ステートメントに参加する機能です。残念ながら、それは sqlite では利用できません。 SQLite でテーブルを結合しているときに UPDATE を行うにはどうすればよいですか?

最初は、できることはあまりないと思いましたが、次のような置換ステートメントをいじってみました。これは、データベース スキーマによってはうまくいくかもしれません。

replace into newdata
(material, category, key, extra_col1, extra_col2)
select o.material, o.category, o.key, n.extra_col1, n.extra_col2
from olddata o
inner join newdata n on o.material = n.material

このアプローチにはいくつかの問題があります。内部結合により、既存のデータのみが置き換えられますが (更新のようなものです)、置き換えは更新とは少し異なります。私のテスト テーブルでは、マテリアル列に主キーまたは一意のキーを配置する必要がありました。また、このデータを参照する外部キーを使用すると、カスケードなどがある場合に問題が発生する可能性があります。私はあなたのスキーマを見ることができないので、それらがあなたにとって問題になるかどうかはわかりません.

お役に立てれば。

于 2012-08-20T22:45:15.033 に答える
-1

update On duplicateまたはupdate on duplicate keyステートメントを使用できます。マニュアルは次のとおりです。http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

于 2012-08-20T17:27:11.480 に答える