Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn tất cả các hàng trùng lặp dựa trên một hoặc hai cột?

Một cách để đạt được kết quả của bạn là sử dụng truy vấn lồng nhau và có mệnh đề:Trong truy vấn bên trong, hãy chọn những người có số lượng nhiều hơn một, và trong truy vấn bên ngoài, hãy chọn id:

Kiểm tra ví dụ sau để biết tiêu chí chọn cột đơn:

Tạo bảng:

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

Chèn tuple:

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

Kết quả bạn cần:

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)

[TRẢ LỜI]

Nhưng nếu bạn lựa chọn tiêu chí dựa trên nhiều hơn một cột thì bạn có thể sử dụng JOIN.

Để giải thích điều đó, tôi đang viết một truy vấn lựa chọn tạo ra một bảng trung gian sẽ được sử dụng trong JOIN làm bảng toán hạng thứ hai.

Truy vấn là chọn tất cả tên nắm tay và cột các bản trùng lặp đó với một số hàng khác:
Ví dụ:chọn các hàng trong đó firstlast tên lặp lại

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)

Vì vậy, bạn chỉ có một cặp firstlast đặt tên cho những phần lặp lại đó (hoặc trùng lặp với một số hàng khác).

Bây giờ, câu hỏi là:làm thế nào để chọn id của hàng này? Sử dụng Tham gia! như sau:

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)

bạn có thể chọn trên cơ sở bao nhiêu cột tùy thích, ví dụ:cột đơn nếu bạn muốn sử dụng phép nối thì hãy xóa họ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Truy vấn đặt hàng và hiển thị một hàng ngẫu nhiên ở trên cùng

  2. MySQL và JSON - chuyển mảng thành hàng

  3. Tại sao GRANT USAGE được tạo vào lần đầu tiên tôi cấp đặc quyền cho người dùng?

  4. MySQL Nhiều số lượng trong một truy vấn với trường hợp

  5. Cách chuyển đổi múi giờ trong MySQL