Làm cách nào để tránh các bản ghi trùng lặp trong truy vấn CHỌN của MySQL?

Tại đây, chúng ta có thể sử dụng khóa chính hoặc Chỉ mục duy nhất trên một bảng có các trường thích hợp để ngăn các bản ghi trùng lặp

Ví dụ. Bảng sau đây không chứa chỉ mục hoặc khóa chính như vậy, vì vậy nó sẽ cho phép các bản ghi trùng lặp cho first_name và last_name

Cú pháp.

TẠO BẢNG người
(
first_name CHAR(20),
last_name CHAR(20
sex CHAR(10)
);

Ở đây chúng ta phải ngăn nhiều bản ghi có cùng giá trị họ và tên được tạo trong bảng này, thêm khóa chính vào định nghĩa của nó. Khi chúng tôi thực hiện việc này, cũng cần phải khai báo các cột được lập chỉ mục không phải là null, vì khóa chính không cho phép giá trị NULL

Cú pháp. TẠO BẢNG người
(
first_name varchar(20) NOT NULL,
last_name varchar(20) NOT NULL,
sex varchar(10),
PRIMARY KEY (last_name, first_name)
);

mysql> CHÈN BỎ QUA VÀO người (last_name, first_name)GIÁ TRỊ( 'arjun', 'singh');

mysql> CHÈN BỎ QUA VÀO người (last_name, first_name)GIÁ TRỊ( 'arjun', 'singh');

mysql > chọn * từ người;

img 1.gif

mysql> THAY THẾ VÀO người (last_name, first_name)GIÁ TRỊ( 'Anuj', 'Kumar');

mysql> THAY THẾ VÀO người (last_name, first_name)GIÁ TRỊ( 'Anuj', 'Kumar');

mysql> chọn * từ người;

img 2.gif

Đếm và xác định trùng lặp

Cú pháp. CREATE TABLE sinh viên
(
last_name CHAR(20) NOT NULL,
first_name CHAR(20) NOT NULL,
street varchar(30) NOT NULL
);
mysql > select * from students;

mysql> SELECT COUNT(*) AS hàng TỪ sinh viên;

count.gif

mysql> SELECT COUNT(DISTINCT last_name, first_name) NHƯ 'các tên riêng biệt' TỪ sinh viên;

coun distinct.gif

Loại bỏ các bản sao bằng cách sử dụng thay thế bảng

Một cách để loại bỏ các bản sao khỏi một bảng là chọn các bản ghi duy nhất của nó vào một bảng mới có cùng cấu trúc. Sau đó thay thế bảng ban đầu bằng bảng mới. Nếu một hàng được coi là trùng lặp với một hàng khác chỉ khi toàn bộ hàng giống nhau, chúng ta có thể sử dụng SELECT DISTINCT để chọn các hàng duy nhất

mysql> TẠO BẢNG top SELECT DISTINCT * FROM sinh viên;

mysql> CHỌN * TỪ ĐẶT HÀNG hàng đầu THEO last_name, first_name;

new 1.gif

Phương pháp này được sử dụng trong trường hợp không có chỉ mục (mặc dù nó có thể chậm đối với các bảng lớn) và đối với các bảng chứa các giá trị NULL trùng lặp, nó sẽ loại bỏ các giá trị trùng lặp đó

Ghi chú. Phương pháp này coi các hàng dành cho Wallace Baxter có các giá trị đường hơi khác nhau là khác biệt

Nếu các mục trùng lặp chỉ được xác định đối với một tập hợp con các cột trong bảng, trước tiên hãy tạo một bảng mới có chỉ mục duy nhất, sau đó chọn các hàng trong đó bằng cách sử dụng CHÈN BỎ QUA

Cú pháp.

TẠO BẢNG top (
last_name CHAR(40) NOT NULL,
first_name CHAR(40) NOT NULL,
street CHAR(40) NOT NULL,
PRIMARY KEY (last_name, first_name));

mysql> INSERT IGNORE INTO top SELECT * FROM sinh viên;

mysql> CHỌN * TỪ ĐẶT HÀNG hàng đầu THEO last_name, first_name;

new 2.gif

Chỉ mục ngăn các bản ghi có giá trị khóa trùng lặp được chèn vào 'top' và bỏ qua yêu cầu MySQL không dừng lại với lỗi nếu tìm thấy bản sao. Phương pháp này là nếu các cột được lập chỉ mục có thể chứa các giá trị NULL, thì chúng ta phải sử dụng một chỉ mục duy nhất thay vì khóa chính, trong trường hợp đó, chỉ mục sẽ không xóa các khóa null trùng lặp

Sau khi tạo bảng mới 'trên cùng' có chứa các hàng duy nhất, hãy sử dụng nó để thay thế bảng sinh viên ban đầu. Kết quả hiệu quả là học sinh sẽ không còn chứa các bản sao

mysql> DROP TABLE students;
mysql> ALTER TABLE top RENAME TO students;

Xóa các bản sao chỉ bằng truy vấn MySQL

Tôi có một bảng có các cột sau đây và tôi muốn xóa các cột trùng lặp trên cột url_addr bằng truy vấn MySQL

only query.gif

Sau đó, chúng ta có thể sử dụng cú pháp XÓA nhiều bảng như sau để xóa các mục trùng lặp, chỉ để lại url đầu tiên dựa trên url_id

Cơ sở dữ liệu của chúng tôi có một bảng tên là City với dữ liệu trong các cột id, namecountry

idnamequốc gia1MadridTây Ban Nha2BarcelonaTây Ban Nha3WarsawBa Lan4CracowBa Lan

Hãy lấy tên của các quốc gia mà không trùng lặp

Dung dịch

Chúng tôi sẽ sử dụng từ khóa DISTINCT. Đây là truy vấn

SELECT
DISTINCT country
FROM City;

Đây là kết quả của truy vấn

đất nướcTây Ban NhaBa Lan

Thảo luận

Nếu bạn muốn truy vấn chỉ trả về các hàng duy nhất, hãy sử dụng từ khóa DISTINCT sau SELECT. DISTINCT có thể được sử dụng để tìm nạp các hàng duy nhất từ ​​một hoặc nhiều cột. Bạn cần liệt kê các cột sau từ khóa DISTINCT

Làm thế nào để nó hoạt động dưới mui xe?

Trong ví dụ của chúng tôi, cả Tây Ban Nha và Ba Lan đều xuất hiện hai lần trong bảng. Tuy nhiên, sau khi áp dụng từ khóa DISTINCT, mỗi từ khóa chỉ được trả về một lần

Làm cách nào để loại bỏ các bản sao trong truy vấn CHỌN của MySQL?

Cách xóa các hàng trùng lặp trong MySQL .
Thiết lập cơ sở dữ liệu thử nghiệm. Tạo cơ sở dữ liệu thử nghiệm. Thêm bảng và dữ liệu. Hiển thị nội dung của bảng ngày
Hiển thị hàng trùng lặp
Loại bỏ các hàng trùng lặp. lựa chọn 1. Xóa các hàng trùng lặp bằng INNER JOIN. Lựa chọn 2. Xóa các hàng trùng lặp bằng bảng trung gian

Làm cách nào để tránh các bản ghi trùng lặp trong MySQL?

Lưu ý − Sử dụng lệnh INSERT IGNORE thay vì lệnh INSERT . Nếu một bản ghi không trùng lặp với một bản ghi hiện có, thì MySQL sẽ chèn nó như bình thường. Nếu bản ghi trùng lặp, thì từ khóa IGNORE yêu cầu MySQL loại bỏ nó một cách âm thầm mà không tạo ra lỗi.

Làm cách nào bạn có thể loại bỏ các bản ghi trùng lặp trong một bảng bằng truy vấn CHỌN?

Thảo luận. Chỉ cần sử dụng từ khóa DISTINCT sau SELECT nếu bạn chỉ muốn chọn các hàng không lặp lại . Từ khóa này buộc truy vấn loại bỏ mọi hàng trùng lặp, chỉ dựa trên các cột bạn đã liệt kê.