Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memadam Rekod Pendua dari Jadual SQL Tanpa Kunci Utama?

Bagaimana untuk Memadam Rekod Pendua dari Jadual SQL Tanpa Kunci Utama?

Barbara Streisand
Lepaskan: 2025-01-03 03:13:40
asal
141 orang telah melayarinya

How to Delete Duplicate Records from an SQL Table Without a Primary Key?

Mengendalikan Rekod Pendua dalam Jadual SQL Tanpa Kekunci Utama

Jika tiada kunci utama, memadamkan rekod pendua daripada jadual SQL boleh mencabar. Mari kita pertimbangkan senario berikut:

Jadual bernama "pekerja" mengandungi rekod berikut tanpa kunci utama:

create table employee
(
 EmpId number,
 EmpName varchar2(10),
 EmpSSN varchar2(11)
);

insert into employee values(1, 'Jack', '555-55-5555');
insert into employee values (2, 'Joe', '555-56-5555');
insert into employee values (3, 'Fred', '555-57-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
insert into employee values (1, 'Jack', '555-55-5555');
insert into employee values (4, 'Mike', '555-58-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6 ,'Lisa', '555-70-5555');
insert into employee values (5, 'Cathy', '555-59-5555');
insert into employee values (6, 'Lisa', '555-70-5555');
Salin selepas log masuk

Memandangkan jadual ini, matlamatnya adalah untuk memadamkan rekod pendua sambil mengekalkan yang unik. Untuk mencapai ini, kita boleh menggunakan gabungan fungsi "ROW_NUMBER()" dan pernyataan "DELETE":

DELETE SUB FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY EmpId, EmpName, EmpSSN ORDER BY EmpId) cnt
 FROM Employee) SUB
WHERE SUB.cnt > 1
Salin selepas log masuk

Memecahkan kod:

  • Pertanyaan dalaman menggunakan fungsi ROW_NUMBER() untuk menetapkan nombor berjujukan kepada setiap baris bagi setiap kumpulan rekod pendua. Klausa PARTITION BY membahagikan data mengikut lajur EmpId, EmpName dan EmpSSN, dan ORDER BY EmpId memastikan bahawa baris dinomborkan dalam tertib menaik EmpId.
  • Pertanyaan luar menggunakan lajur cnt daripada pertanyaan dalam sebagai penapis untuk memilih baris pendua sahaja (cnt > 1).
  • Pernyataan DELETE menggunakan subquery untuk memadam baris pendua daripada jadual asal.

Dengan melaksanakan pertanyaan ini, rekod pendua dalam jadual "pekerja" akan menjadi dialih keluar, hanya meninggalkan rekod unik:

select * from employee;

EmpId EmpName EmpSSN
1      Jack   555-55-5555
2      Joe    555-56-5555
3      Fred   555-57-5555
4      Mike   555-58-5555
5      Cathy  555-59-5555
6      Lisa   555-70-5555
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Memadam Rekod Pendua dari Jadual SQL Tanpa Kunci Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan