2016-03-24 17 views
1
Ben Konumları kaydeder bir sql tablo,
ID Name X  Y  Z 
------------------------- 
1 Loc1 12 24 45 
2 Loc2 12 24 60 
3 Loc3 54 32 33 
4 Loc4 54 32 64 
5 Loc5 98 66 90 
6 Loc6 98 66 77 
7 Loc7 44 50 98  

Seçme ve özellikle sütunlar için çoğaltılamaz satırları silme

Bazı Yer koordinatları (x ve y) yanlışlıkla çoğaltılır var

ben seçmek istiyorum SQL ve bunlardan birini silin.

ID Name X  Y  Z 
------------------------- 
1 Loc1 12 24 45 
2 Loc3 54 32 33 
3 Loc5 98 66 90 
4 Loc7 44 50 98  

Bu, sql sorgusu ile mümkün mü?

+0

Hangi RDBMS Eğer kullanarak MySQL veya SQL Server edilir? –

+0

Hangisini kurtulmak istiyorsun? Örneğin Loc1 ve Loc2, X ve Y için aynı değerlere sahiptir. Loc1 neden tutulur ve Loc2 tutulmaz? –

+0

Sayım birimi bölümünü X tarafından X için kullanın ... ve 1 numaralı çubuğun daha büyük olduğu yerde silin, daha sonra Name – Veljko89

cevap

1

Bence alter-table komutunu kullanabilir ve tüm sütunu bırakabilirsiniz.

Açıklamalarda belirttiği görüldüğü gibi
ALTER TABLE table_name 
DROP COLUMN column_name 
+0

neden sütun bırakılır? – TheGameiswar

1
with cte 
as 
(
select *,row_number() over (partition by x,y order by x) as rn 
) 
delete from cte where rn>1 

, bu rastgele satır (undeterministic), yapmaya siler o MySQL için

0

kullanabilirsiniz sizin durumunuzda adıyla deterministik düzeni:

DELETE mytable 
FROM mytable 
JOIN (SELECT MIN(ID) AS ID, X, Y 
     FROM mytable 
     GROUP BY X, Y 
) AS t ON mytable.X = t.X AND mytable.Y = t.Y AND mytable.ID > t.ID 

Demo here

0

Onun kolay:

.210

YOKSAY ile 2 Sütunlar üzerinde INDEX ekleyin:

ALTER IGNORE TABLE YOUR_TABLE 
ADD KEY (X,Y); 

Thats tüm