Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pilih semua baris duplikat berdasarkan satu atau dua kolom?

Salah satu cara untuk mencapai hasil Anda adalah menggunakan kueri bersarang dan memiliki klausa:Di kueri dalam pilih yang memiliki jumlah lebih dari satu, dan di kueri luar pilih id:

Periksa contoh berikut untuk kriteria pemilihan kolom tunggal:

Buat tabel:

CREATE TABLE `person` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `first` varchar(120) NOT NULL,
    `last` varchar(120) NOT NULL
);

Sisipkan tupel:

INSERT INTO `person` ( `first`, `last`) VALUES
("mukta", "chourishi"),
("mukta", "chourishi"),
("mukta", "john"),
("carl", "thomas" );

Hasil yang Anda butuhkan:

mysql> SELECT  `id` 
    -> FROM `person` 
    -> WHERE `first`=(SELECT `first` FROM `person` HAVING COUNT(`first`) > 1);
+----+
| id |
+----+
|  1 |
|  2 |
|  3 |
+----+
3 rows in set (0.00 sec)

[JAWABAN]

Tetapi jika Anda memilih kriteria berdasarkan lebih dari satu kolom maka Anda dapat menggunakan JOIN.

Untuk menjelaskannya, saya menulis kueri pemilihan yang membuat tabel perantara yang akan digunakan di JOIN sebagai tabel operan kedua.

Query adalah memilih semua nama dan kolom pertama yang diduplikasi dengan beberapa baris lainnya:
Misalnya pilih baris di mana first dan last pengulangan nama

mysql> SELECT `first`, `last`,  count(*)  as rows 
    -> FROM `person` 
    -> GROUP BY `first`, `last` 
    -> HAVING count(rows) > 1;
+-------+-----------+------+
| first | last      | rows |
+-------+-----------+------+
| mukta | chourishi |    2 |
+-------+-----------+------+
1 row in set (0.00 sec)

Jadi Anda hanya memiliki satu pasang first dan last beri nama pengulangan tersebut (atau duplikat dengan beberapa baris lain).

Sekarang, pertanyaannya adalah:bagaimana cara memilih id dari baris ini? Gunakan Gabung! sebagai berikut:

mysql> SELECT  p1.`id`
    -> FROM `person` as p1
    -> INNER JOIN (
    ->     SELECT `first`, `last`,  count(*)  as rows
    ->     FROM `person` 
    ->     GROUP BY `first`, `last` 
    ->     HAVING count(rows) > 1) as p
    -> WHERE p.`first` = p1.`first` and p.`last` = p1.`last`;  
+----+
| id |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0.06 sec)

Anda dapat memilih berdasarkan kolom sebanyak yang Anda inginkan mis. satu kolom jika Anda ingin menggunakan join maka hapus nama belakang.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan koneksi dikembalikan ke kumpulan koneksi dengan Manajer Entitas Spring JPA (Hibernate)?

  2. Query Parameterized untuk MySQL dengan C#

  3. Bagaimana cara menetapkan nilai default bidang sebagai '0000-00-00 00:00:00'?

  4. Masukkan dan atur nilai dengan masalah max()+1

  5. Perbedaan antara INT dan UUID di MySQL