2012-02-24 15 views
7

İki yapısal olarak aynı tablo var, tablo2 toplu güncelleştirme tablo1'de kullanılacak yeni veriler için bir aşamadır.MySQL iki tabloyu karşılaştırır ve aynı birincil anahtara sahip satırları döndürür, ancak diğer alanlarda farklı veriler

Tablo1'de hangi satırların güncelleneceğini bulmam gerekiyor. Eklenecek satırları ve silinecekleri göz ardı etmek istiyorum. Yalnızca birincil anahtarın aynı kaldığı güncellenmiş satırlarla ilgileniyorum ancak satırdaki diğer alanlardan bir veya daha fazlası farklı veriler içeriyor. Şimdiye kadar geldiğim en yakın şey şu ifadedir:

SELECT table2.* FROM table2 
INNER JOIN table1 
ON table1.primarykey = table2.primarykey 
WHERE table1.field1 != table2.field1 
OR table1.field2 != table2.field2 
OR table1.field3 != table2.field3 

Bu, 0 satırı döndürür.

DÜZENLEME: Sorgu gerçekten çalışıyor. Verilerin kendisiyle ilgili bir sorun vardı. Bir süreliğine facepalm gidiyorum.

Girişiniz için herkese teşekkür ederiz.

+1

Alanlar null olabilir mi? –

+0

Conrad geldikçe, null eşit değil, niçin sizin karşılaştırmanıza göre bunu hesaba katmanız gerekiyor - yazdığınız şekilde, veriler "aynı" olabilir ama eğer boş olanlar varsa eşit olarak görünmez Orada. – Poodlehat

+1

Ayrıca, izin veren bir depolama altyapısı kullanıyorsanız, neden otomatik yükleme özelliğini kapatmıyor, güncelleştirmeyi çalıştırın ve nelerin değiştiğini görün, sonra geri alın? – Poodlehat

cevap

4

Muhasebe etmediğiniz bir şey boş. o verilere sen kaç satır tablo1 olduğu gibi bir birincil anahtar aynı olması ve farklı alanlardan en az birinin nasıl tablo2 saymak isteyen diğer bir deyişle

SELECT table2.* FROM table2 
INNER JOIN table1 
ON table1.primarykey = table2.primarykey 
WHERE table1.field1 != table2.field1 
     OR table1.field2 != table2.field2 
     OR table1.field3 != table2.field3 
     OR (table1.field1 is null and table2.field1 is not null) 
     OR (table2.field1 is null and table1.field1 is not null) 
     OR (table1.field2 is null and table2.field2 is not null) 
     OR (table2.field2 is null and table1.field2 is not null) 
     OR (table1.field3 is null and table2.field3 is not null) 
     OR (table2.field3 is null and table1.field3 is not null) 
0

bağlı olarak bu ya senin sorunun olabilir veya olmayabilir , sağ? Ancak veriler farklıysa ya da olmasın nasıl önemlidir? Veriler aynıysa, UPDATE'in hiçbir etkisi olmaz.

SELECT 
    COUNT(T2.*) 
FROM 
    table2 AS T2 
JOIN table1 AS T1 ON (T1.primarykey = T2.primarykey); 
+0

Aslında bu soruya cevap vermiyor, belki de tüm sorumu okumadınız mı? Silahı biraz atladı – pythonian29033

İlgili konular