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

Loại bỏ các bản sao chỉ bằng cách sử dụng một truy vấn MySQL?

Hãy xem xét trường hợp thử nghiệm sau:

CREATE TABLE mytb (url_id int, url_addr varchar(100));

INSERT INTO mytb VALUES (1, 'www.google.com');
INSERT INTO mytb VALUES (2, 'www.microsoft.com');
INSERT INTO mytb VALUES (3, 'www.apple.com');
INSERT INTO mytb VALUES (4, 'www.google.com');
INSERT INTO mytb VALUES (5, 'www.cnn.com');
INSERT INTO mytb VALUES (6, 'www.apple.com');

Nơi bảng thử nghiệm của chúng tôi hiện chứa:

SELECT * FROM mytb;
+--------+-------------------+
| url_id | url_addr          |
+--------+-------------------+
|      1 | www.google.com    |
|      2 | www.microsoft.com |
|      3 | www.apple.com     |
|      4 | www.google.com    |
|      5 | www.cnn.com       |
|      6 | www.apple.com     |
+--------+-------------------+
5 rows in set (0.00 sec)

Sau đó, chúng tôi có thể sử dụng nhiều bảng DELETE cú pháp như sau:

DELETE t2
FROM   mytb t1
JOIN   mytb t2 ON (t2.url_addr = t1.url_addr AND t2.url_id > t1.url_id);

... sẽ xóa các mục nhập trùng lặp, chỉ để lại url đầu tiên dựa trên url_id :

SELECT * FROM mytb;
+--------+-------------------+
| url_id | url_addr          |
+--------+-------------------+
|      1 | www.google.com    |
|      2 | www.microsoft.com |
|      3 | www.apple.com     |
|      5 | www.cnn.com       |
+--------+-------------------+
3 rows in set (0.00 sec)

CẬP NHẬT - Thêm các nhận xét mới ở trên:

Nếu các URL trùng lặp không có cùng định dạng, bạn có thể muốn áp dụng REPLACE() chức năng loại bỏ www. hoặc http:// các bộ phận. Ví dụ:

DELETE t2
FROM   mytb t1
JOIN   mytb t2 ON (REPLACE(t2.url_addr, 'www.', '') = 
                   REPLACE(t1.url_addr, 'www.', '') AND 
                   t2.url_id > t1.url_id);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đọc và đặt lại AUTO_INCREMENT trong MySQL

  2. MySQL:ALTER IGNORE TABLE đưa ra vi phạm ràng buộc về tính toàn vẹn

  3. Cách di chuyển Moodle độc ​​lập sang thiết lập có thể mở rộng cơ sở dữ liệu theo cụm

  4. Nhận tên bảng bằng cách sử dụng câu lệnh SELECT trong MySQL

  5. Cách xuất cơ sở dữ liệu bằng dòng lệnh