bu durum var:Sil satırlar SQL
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.
bu durum var:Sil satırlar SQL
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.
WITH t AS
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY col1, col2, col3) ORDER BY (id) rn
FROM mytable
)
DELETE
FROM t
WHERE rn > 1
Sorguyu nasıl düzenlendiğini ve güncellendiğini biliyorum. –
@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
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()
;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.
** '' ... DISTINCT SEÇ ** – lad2025
bir kopyası tablo yapın hakkında okursanız Bu çözüm, – jarlh
Hangi dbms kullanıyorsunuz? – jarlh