pendua data pertanyaan mysql

WBOY
Lepaskan: 2023-05-12 10:00:37
asal
2866 orang telah melayarinya

MySQL ialah sistem pengurusan pangkalan data hubungan popular yang boleh digunakan untuk menyimpan, mengurus dan membuat pertanyaan pangkalan data. Dalam MySQL, kadangkala kita perlu menanyakan data pendua. Artikel ini akan memperkenalkan anda cara menggunakan MySQL untuk menanyakan pertindihan data.

Langkah 1: Buat pangkalan data dalam MySQL dan tambah data

Buat pangkalan data dalam MySQL dan tambahkan jadual dengan data pendua. Berikut ialah contoh pertanyaan SQL:

CREATE DATABASE testdb; USE testdb; CREATE TABLE users ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL, email VARCHAR(50) NOT NULL ); INSERT INTO users (name, email) VALUES ('Tom', 'tom@email.com'), ('Steve', 'steve@email.com'), ('John', 'john@email.com'), ('Tom', 'tom@email.com'), ('Jim', 'jim@email.com');
Salin selepas log masuk

Pertanyaan ini akan mencipta pangkalan data baharu bernama "testdb" dan mencipta jadual bernama "pengguna" di dalamnya. Jadual mengandungi tiga lajur: "id" (kunci utama), "nama" dan "e-mel". Kami memasukkan lima baris, dua daripadanya mengandungi nama dan alamat e-mel yang sama.

Langkah 2: Pertanyaan untuk data pendua

Sekarang kita perlu mencari semua baris pendua. Untuk melakukan ini, kami akan menggunakan pertanyaan bersarang:

SELECT name, email, COUNT(*) c FROM users GROUP BY name, email HAVING c > 1;
Salin selepas log masuk

Pertanyaan ini akan mengembalikan semua baris di mana nama dan alamat e-mel muncul lebih daripada sekali dalam jadual. Kami menggunakan pernyataan GROUP BY untuk mengumpulkan mengikut nama dan alamat e-mel, dan pernyataan HAVING untuk menapis kumpulan yang mempunyai lebih daripada 1 baris dalam kumpulan.

Selepas menjalankan pertanyaan ini, kami akan mendapat hasil berikut:

+------+----------------+---+ | name | email | c | +------+----------------+---+ | Tom | tom@email.com | 2 | +------+----------------+---+
Salin selepas log masuk

Seperti yang kita lihat, pertanyaan ini menemui data pendua yang kami tambahkan dalam jadual. Hasilnya menunjukkan nama pendua dan alamat e-mel dan bilangan kali ia muncul dalam jadual.

Langkah Tiga: Alih Keluar Data Pendua

Jika kami mahu mengalih keluar semua baris pendua, kami boleh menggunakan pertanyaan berikut untuk mengalih keluarnya:

DELETE FROM users WHERE id NOT IN ( SELECT id FROM ( SELECT MIN(id) id FROM users GROUP BY name, email ) t );
Salin selepas log masuk

Pertanyaan ini akan mengalih keluar semua pendua baris yang bukan Baris pendua dengan ID minimum. Kami menggunakan subkueri untuk memilih ID terkecil dalam setiap kumpulan berulang. Subkueri ini mula-mula menggunakan pernyataan GROUP BY untuk mengumpulkan mengikut nama dan alamat e-mel, kemudian memilih ID terkecil dalam setiap kumpulan. Pertanyaan utama menggunakan pernyataan NOT IN dan subquery untuk memadam semua baris yang tidak mengandungi ID terkecil.

Selepas menjalankan pertanyaan ini, kami boleh menjalankan pertanyaan di atas sekali lagi untuk mengesahkan bahawa data pendua telah berjaya dialih keluar.

Ringkasan

Mencari data pendua dalam MySQL adalah mudah. Kami boleh menggunakan pertanyaan bersarang dan penyata GROUP BY untuk mencari baris pendua dan memadamkannya menggunakan penyataan DELETE. Dengan menggunakan teknologi ini, kami boleh mengurus dan menyelenggara pangkalan data dengan mudah.

Atas ialah kandungan terperinci pendua data pertanyaan mysql. 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
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!