2017-06-29 10 views
0

私は別のデータベースの別のテーブルでテーブルを更新しようとしている、私は最後の更新私は1つの製品で複数のカテゴリを保存する関数を作成したので、私は、表示されます。私は状況を理解しています。なぜそれが起こっているのですか?重複データを持つテーブルを使って更新を許可する方法はありますか?制約を無効にする方法はありますか?テーブルを重複した主キーで更新するにはどうすればよいですか?

マイクエリ

UPDATE novourbano.oc_product_to_category oc 
INNER JOIN erp_product_category erp ON oc.product_id = erp.erp_productid 
SET oc.product_id = erp.erp_productid, 
oc.category_id = erp.erp_categoryid 
WHERE oc.product_id <> 0 

私はそれを使用しよう:

SET GLOBAL FOREIGN_KEY_CHECKS=0; 

しかし、まだ機能していません。なにか提案を?前もって感謝します!テーブル名は、テーブルの目的を反映している場合

+0

主キーは常に一意である必要があります。同じ主キーで同じテーブルに2つの行を持つことはできません。制約チェックをオフにしても問題は解決しません。既存の行と同じ主キーを持つ新しい行を挿入しようとしないようにする必要があります。 – Jesper

+0

まあ、重複している主キーを持つことはできません。これはプライマリキーのプロパティの1つです。したがって、何らかの形で違う新しいキーを生成する必要があります。 – Jaydee

+0

あなたはあなたの心の中でコンセプトをミキシングする必要があります。主キーは1つ、外来キーは別のキーです。どんなところでも、基本的に同じ通りの住所の2つの家を持つ方法を尋ねています。 –

答えて

1

主キーが同じproduct_idcategory_idでいくつかの行のような重複を避けるために

PRIMARY KEY(product_id, category_id)

をする必要があります。

あなたはこのアップデートにIGNOREを使用することができます。

UPDATE IGNORE novourbano.oc_product_to_category oc 
INNER JOIN erp_product_category erp ON oc.product_id = erp.erp_productid 
SET oc.product_id = erp.erp_productid, 
oc.category_id = erp.erp_categoryid 
+0

完璧!ありがとう! –

関連する問題