2016-04-10 11 views
0

seçin MinID ve kompleksi kullanımı MySQL tablosundan çoğaltır çıkarın Alt kimlik kaldırıldı, sadece bir alt kümesi. Diğer dupes desenleri için başka kriterlerim var.Burada bu dk kimlikle kayıtları silmek bulundu

Select min(Z),Max(Z),count(*) from Table 
group by P,N 
having count(*)>1 and Min(Z)!=Max(Z) and Min(Z)>0 

Ben ilk minID kaldırmak SONRA kayıtların bu alt kümesini almak ve nasıl belirsiz duyuyorum: Ben de o zaman dk kimlikleri kaldırılmasını istiyorsanız DO dupes VE diğer koşullara sahip kayıtların alt kümesini almak için benim seçme yapılmış MySQL söz konusu alt grubun

cevap

0

yılında safdilli gelen LEFT JOIN kullanın: id sizin ifadede nasıl tanımlandığını belirsizdir

delete t 
    from table t left join 
     (Select min(Z), Max(Z), count(*) 
      from Table 
      group by P, N 
      having count(*) > 1 and Min(Z) <> Max(Z) and Min(Z) > 0 
     ) tt 
     on t.? = tt.? 
    where tt.? is null; 

. Alt sorgunun saklamak veya silmek için kimlikleri oluşturup oluşturmadığı da net değildir. Yukarıdaki sürüm, saklamak için kimlikleri oluşturduğunu varsayar. (Silmekte olduğunuz kimlikleri oluşturuyorsa, inner join kullanın ve where maddesinden kurtulun.)

+0

İfadelerim basitçe tablodaki bir alt kümeyi oluşturmaktır. A) yinelemelerin var olduğu b) en düşük ID ile. Tabloda yinelenen min (id) sürümünü kaldırmak istemiyorum var olan yinelenen var, aksi takdirde ben orijinal silme min kimliği basit çalıştırmak istiyorum. Öyleyse, gerçekte neler olması gerektiği, 'yinelenen ve bu ek kriterleri karşılayan tabloA'daki kayıtların alt kümesini bulmalı ve daha sonra en düşük ID' – user3649739

+0

@ user3649739 olanı kaldırmalıdır. . . Bu, 'join's ile ele alınabilir. Ancak, açıklamanız hala% 100 açık değildir. Örnek veriler ve istenen sonuçlar - özellikle kenar kutuları da dahil olmak üzere - yararlıdır. –