Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memadam Baris Pendua dengan Cekap dalam Netezza Tanpa Pengecam Unik?
Alih keluar baris pendua dengan cekap tanpa pengecam unik dalam Netezza
Apabila berurusan dengan jadual besar yang mengandungi baris pendua, mencari cara paling berkesan untuk mengalih keluarnya boleh menjadi mencabar. Walaupun pertanyaan ini telah terbukti berfungsi dalam SQL, bagaimana pula dengan Netezza?
Pertanyaan SQL mentah
<code class="language-sql">WITH TempEmp AS ( SELECT name, ROW_NUMBER() OVER(PARTITION by name, address, zipcode ORDER BY name) AS duplicateRecCount FROM mytable ) DELETE FROM TempEmp WHERE duplicateRecCount > 1;</code>
Penyelesaian Netezza
Pernyataan DELETE selepas klausa WITH tidak serasi dengan Netezza. Sila pertimbangkan penyelesaian berikut menggunakan kata kunci MENGGUNAKAN:
<code class="language-sql">DELETE FROM table_with_dups T1 USING table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.name = T2.name AND T1.address = T2.address AND T1.zipcode = T2.zipcode;</code>
Pratonton keputusan
Untuk menyemak rekod sebelum memadamkannya, gantikan DELETE dengan SELECT * dan USING dengan koma, seperti ini:
<code class="language-sql">SELECT * FROM table_with_dups T1, table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.name = T2.name AND T1.address = T2.address AND T1.zipcode = T2.zipcode;</code>
Nota Prestasi
Jika beberapa pendua dijangkakan, penyelesaian ini berprestasi lebih baik daripada penyelesaian menggunakan klausa NOT IN (...), yang menjana sejumlah besar baris dalam subkueri. Selain itu, jika lajur kunci mengandungi nilai NULL, gunakan COALESCE() untuk mengendalikan perbandingan, contohnya:
<code class="language-sql">AND COALESCE(T1.col_with_nulls, '[NULL]') = COALESCE(T2.col_with_nulls, '[NULL]')</code>
Atas ialah kandungan terperinci Bagaimana untuk Memadam Baris Pendua dengan Cekap dalam Netezza Tanpa Pengecam Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!