2010-11-19 15 views
2

私は顧客情報のデータベースを持っています。請求先住所と配送先住所の列には、それがどれであるかを示すフラグが付いています。 BA、SA。レコードの多くはBAに設定されているため、顧客ごとに重複しています。 SAに重複レコードを設定する必要があります。 私はこれを試しましたが、複製されたすべてのレコードを更新しました。代わりに、重複したレコードの1つだけを更新したいと思います。MySql重複レコードのうちの1つだけを更新します

UPDATE customer1 AS C1 JOIN 
(
SELECT Ca.user_id, C2.CID, Ca.address_type FROM 
customer1 AS Ca JOIN 
customer2 AS C2 ON CC.user_id = C2.CID 
GROUP BY Ca.user_id 
    HAVING COUNT(*) > 1 
) AS C2a ON 
C1.user_id = C2.CID 
SET C1.address_type = 'SA' 
+1

テーブルスキーマを投稿できますか? – InSane

答えて

0

は限りデータベースに関しては、重複レコードはindistiguishableあります。

あなたの最善の選択肢は、自動的に生成されたID(auto_incrementを参照)を各レコードに追加することです。次に、更新するレコードを一意に識別できます。

もう1つの方法は、複製データの1つからデータをコピーし、削除し、1つのレコードを挿入し、必要な変更を加えてもう1つのレコードを挿入することです。

0

dupplicateデータを避けるために、テーブルスキーマを正規化する必要があります。

意味、すべてのアドレスが である「アドレス」テーブルを提案し、これらのアドレスを指すフィールドBA_addressおよびSA_addressによって「顧客」テーブルを拡張します。

BAからSAへのレコードを「複製」する必要がある場合は、BAフィールドのようにSAフィールド内に同じアドレスIDを入れるだけです。他の人が言ってきたように、あなたが最初の場所でデータベース内の重複行を持つべきではありませんことを

1
... 
LIMIT 0,1 

は注意 - それはあなたのスキーマが間違っている暗示。また、注文なしでLIMITを使用して警告が表示されます