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.