Kekalkan baris unik: kendalikan pengalihan keluar pendua
Dalam bidang operasi pangkalan data, selalunya perlu memadamkan baris pendua daripada jadual. Walau bagaimanapun, tugas ini boleh menjadi mencabar apabila baris kekurangan pengecam unik. Soalan ini membincangkan situasi ini, mencari penyelesaian untuk menghapuskan baris pendua sambil mengekalkan kejadian pertama setiap gabungan unik.
Pertanyaan:
Pertanyaan yang diberikan pada mulanya cuba memadamkan baris berdasarkan kehadiran nilai id pendua. Walau bagaimanapun, kaedah ini gagal kerana tiada pengecam unik sedemikian wujud dalam jadual. Sebaliknya, penyelesaian yang lebih mantap diperlukan untuk mengendalikan pengesanan dan pengalihan keluar pendua tanpa bergantung pada pengecam baris yang jelas.
Gunakan CTE dan ROW_NUMBER:
Cara yang berkesan untuk mencapai matlamat ini ialah menggunakan ungkapan jadual biasa (CTE) bersama-sama dengan fungsi ROW_NUMBER(). Teknik CTE mencipta CTE jadual sementara yang mengandungi lajur asal dan lajur tambahan RN yang mewakili nombor baris untuk setiap gabungan nilai col1.
Pembahagian dan nombor:
Fungsi ROW_NUMBER() membenarkan pembahagian baris berdasarkan lajur col1 dan menetapkan nombor baris dalam tertib menaik dalam setiap partition. Oleh itu, baris pendua dalam partition yang sama akan mempunyai nilai RN unik lebih daripada 1.
Proses pemadaman:
Dengan memanfaatkan CTE, kami boleh mengasingkan dan mengalih keluar mana-mana baris dengan nilai RN lebih besar daripada 1, dengan berkesan mengalih keluar pendua sambil mengekalkan tika pertama bagi setiap gabungan unik.
Keputusan:
Selepas menggunakan pertanyaan yang diubah suai, hasil yang diharapkan dicapai:
<code>COL1 COL2 COL3 COL4 COL5 COL6 COL7 john 1 1 1 1 1 1 sally 2 2 2 2 2 2</code>
Fungsi lanjutan:
Pertanyaan boleh diperibadikan selanjutnya untuk mengendalikan pengesanan dan pengalihan keluar pendua merentas berbilang lajur dengan hanya menambahkan lajur ini pada klausa PARTITION BY. Sebagai contoh, untuk mempertimbangkan col1 dan col2 untuk pengenalan pendua, klausa PARTITION BY akan menjadi:
<code>ROW_NUMBER()OVER(PARTITION BY Col1, Col2 ORDER BY OrderColumn)</code>
Kaedah ini menyediakan cara yang boleh dipercayai dan cekap untuk menghapuskan baris pendua berdasarkan lajur yang dipilih, memberikan fleksibiliti dalam menyesuaikan diri dengan keperluan data yang berbeza.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Padamkan Baris Pendua dalam Jadual Sambil Mengekalkan Kejadian Pertama Setiap Gabungan Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!