2016-04-13 19 views
-4

bu durum var:Sil satırlar SQL

enter image description here

ben ayrı sıranın birini silmek gerek

, yani, sadece birini ihtiyaç "1, 1, 1, "ve sadece SQL'de CTE'de" 2, 2, 2 "ye ihtiyacınız var, fakat nasıl görebileceğinizi görebiliyorum.

+0

** '' ... DISTINCT SEÇ ** – lad2025

+0

bir kopyası tablo yapın hakkında okursanız Bu çözüm, – jarlh

+1

Hangi dbms kullanıyorsunuz? – jarlh

cevap

2
WITH t AS 
     (
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY col1, col2, col3) ORDER BY (id) rn 
     FROM mytable 
     ) 
DELETE 
FROM t 
WHERE rn > 1 
+0

Sorguyu nasıl düzenlendiğini ve güncellendiğini biliyorum. –

+0

@SebastianPelaez: cevap hala çalışıyor. Gerçek tablo düzeninizi (eğer tüm sütunlarınızı isimlendirmediyseniz) (sütun adı yok) "görürsek çok yardımcı olur" – Quassnoi

1

Basit bir şey önerebilir:

CREATE TABLE tmp_table AS 
SELECT DISTINCT col1,col2,col3 FROM YourTable; 

DELETE FROM YourTable; 

INSERT INTO YourTable 
SELECT * FROM tmp_table; 

DROP TABLE tmp_table; 

Bu temelde bir geçici tablosu kullanılarak farklı değerlerle masanızı yeniden oluşturur.

Not: Bunu yapmak için daha verimli yollar vardır, ancak DBMS'nizi belirtmediniz ve bu, birinden diğerine değişebilir. Daha ROW_NUMBER(), Rank(), DenseRank()

0
ANSI SQL

için
;with cte_del as 
(
select *,row_number() over (partition by col1,col2,col3 order by col1,col2,col3) as rownum from yourtable 
) 
delete from cte_del where rownum > 1 

Good kopya içine eklemek orijinalden farklı seçin.