2010-11-19 27 views
2

Müşteri bilgileri veritabanına sahibim. Fatura adresi ve gönderim adresi için ayrı bir satır vardır; SA, SA. Kayıtların birçoğu BA'ya ayarlandı, bu yüzden her müşteri için kopyalarım var. SA'ya bir yinelenen kayıt ayarlamanız gerekiyor. Bunu denedim ancak yinelenen kayıtları TÜM güncelleştirildi. Bunun yerine, yinelenen kayıtlardan sadece birini güncellemek istiyorum;MySql UPDATE yinelenen kayıtlardan yalnızca biri

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

tablosunu kullanarak bir uyarı alırsınız Tablo şemasını gönderebilir misiniz? – InSane

cevap

0
Veri tabanı söz konusu olduğunda, çift kayıtlar ayırt edilemez.

Sanırım en iyi seçeneğiniz her kayıt için otomatik olarak oluşturulmuş bir kimlik eklemek (auto_increment). Ardından güncellemek istediğiniz kaydı benzersiz bir şekilde tanımlayabilirsiniz.

Diğer bir seçenek, kopyalardan birindeki verileri kopyalamak, silmek, bir kayıt eklemek ve sonra diğerini gerekli değişikliğe eklemektir. Çift taraflı verileri önlemek için tablo şemalarınızı normalleştirmeniz gerekir.

0

Anlamı, tüm adresleri bir "adres" tablo öneririm ve "müşteri" tablosunu bir alan BA_address ve SA_address, bu adreslere işaret ederek uzatır.

Şimdi BA'dan SA'ya bir kaydın "çoğaltılması" gerekiyorsa, BA alanında olduğu gibi SA alanı içinde aynı adres kimliğini yerleştirmeniz yeterlidir. Diğerleri söylediler, ilk etapta veritabanında yinelenen satırları sahip olmaması gereken çok

1
... 
LIMIT 0,1 

Not - bu şema yanlış ima eder. Ayrıca, LIMIT kullanarak