Nhiều lần bạn có thể gặp phải tình huống khi bạn muốn so sánh hai bảng và lấy các bản ghi chưa khớp từ chúng. Đây là một thực tế phổ biến khi di chuyển cơ sở dữ liệu được thực hiện. Vì vậy, trong hướng dẫn này, chúng ta sẽ học cách so sánh hai bảng để tìm các bản ghi không khớp. Vậy hãy bắt đầu
điều kiện tiên quyết
Trong MySQL, như đã nêu trước đó, hai bảng được so sánh khi quá trình di chuyển dữ liệu được thực hiện để tìm dữ liệu không khớp. Ví dụ: cơ sở dữ liệu mới có thể có lược đồ khác với cơ sở dữ liệu cũ/cũ. Vì vậy, chúng ta phải kiểm tra chéo xem dữ liệu được di chuyển có giống hoàn toàn với dữ liệu trước đó không
Trong trường hợp này, chúng ta có thể so sánh hai bảng để kiểm tra dữ liệu khớp và dữ liệu không khớp từ cơ sở dữ liệu cũ và cơ sở dữ liệu mới. Đối với điều này, chúng ta có thể sử dụng các thuật ngữ và chức năng của MySQL như phép nối, phép hợp, hàm tổng hợp, v.v.
Bây giờ hãy xem cách chúng ta có thể so sánh hai bảng và tìm dữ liệu chưa khớp
So sánh hai bảng trong MySQL
Để so sánh hai bảng, chúng ta có thể sử dụng các truy vấn lồng nhau hoặc MySQL cũng tham gia. Tuy nhiên, chúng tôi sẽ sử dụng toán tử UNION để tìm các giá trị chưa khớp từ hai bảng
Cách tiếp cận của chúng tôi sẽ như sau -
- Đầu tiên, tìm sự kết hợp của hai bảng
- Thứ hai, chúng ta sẽ sử dụng mệnh đề GROUP BY để nhóm các hàng lại với nhau
- Thứ ba, các nhóm có số đếm là 1 sẽ được chọn bằng mệnh đề HAVING
- Cuối cùng, chúng tôi sẽ sắp xếp thứ tự các hàng bằng cách sử dụng mệnh đề ORDER BY và hiển thị chúng
Đây là cách tiếp cận của chúng tôi để giải quyết vấn đề. Bây giờ hãy bắt đầu viết mã
Đầu tiên, chúng ta sẽ tạo hai bảng có cùng mô tả. Lưu ý rằng, chúng tôi đã thêm một cột thứ ba trong bảng thứ hai để có thể dễ dàng phân biệt hàng mới được thêm vào
Code language: SQL [Structured Query Language] [sql]
CREATE TABLE table1[ id int auto_increment primary key, title varchar[255] ]; CREATE TABLE table2[ id int auto_increment primary key, title varchar[255], entry varchar[255] ];
Các bảng được tạo thành công. Hãy chèn chính xác cùng một dữ liệu vào chúng
INSERT INTO table1[title] VALUES['row 1'],['row 2'],['row 3']; INSERT INTO table2[title,entry] SELECT title, 'data migration' FROM table1;
Code language: SQL [Structured Query Language] [sql]
Bây giờ hãy viết một truy vấn SQL để tìm dữ liệu chưa khớp bằng cách so sánh chúng
Code language: SQL [Structured Query Language] [sql]
SELECT id,title FROM [ SELECT id, title FROM table1 UNION ALL SELECT id,title FROM table2 ]newTable GROUP BY id, title HAVING count[*] = 1 ORDER BY id;
Đầu tiên, hãy nhìn vào bên trong dấu ngoặc tròn
- Chúng tôi đã kết hợp dữ liệu của hai bảng và đặt bí danh “newTable” cho bảng mới dẫn xuất
- Bây giờ, câu lệnh SELECT đầu tiên sẽ chọn id và tiêu đề từ bảng dẫn xuất mà chúng tôi đã đề cập ở trên. Chúng tôi đã sử dụng mệnh đề GROUP BY để nhóm các hàng theo id và tiêu đề
- Tiếp theo, chúng tôi đã sử dụng mệnh đề HAVING nơi chúng tôi sẽ kiểm tra xem các nhóm được tạo bởi GROUP BY có phải là tập hợp chỉ một lệnh không. Bằng cách này, chúng tôi sẽ tìm thấy các bản ghi không khớp vì tất cả các bản ghi khớp là nhóm hai và mệnh đề HAVING sẽ lọc các bản ghi chỉ là nhóm một
- Sử dụng mệnh đề ORDER BY, chúng tôi sắp xếp các bản ghi theo id. Bây giờ hãy kiểm tra đầu ra của truy vấn trên
Lưu ý rằng, cả hai bảng đều chứa chính xác dữ liệu giống như hiện tại trong cột id và tiêu đề. Vì vậy, chúng ta sẽ nhận được một kết quả trống
Như bạn có thể thấy, chúng tôi đã nhận được một tập hợp kết quả trống
Hãy thêm một hàng mới vào bảng thứ hai. Vì vậy, khi chúng tôi thực hiện truy vấn trên, chúng tôi sẽ nhận được kết quả không trống
Code language: SQL [Structured Query Language] [sql]
INSERT INTO table2[title,entry] VALUES['new row 4','new row'];
Bây giờ, hãy thực hiện truy vấn mà chúng tôi đã tạo ở trên để so sánh và tìm các bản ghi chưa khớp
Như bạn có thể thấy, bản ghi mới không có trong bảng đầu tiên nên chúng tôi đã nhận bản ghi mới đó
Bằng cách này, chúng ta có thể tìm thấy các bản ghi chưa khớp trong MySQL bằng cách so sánh hai bảng
Phần kết luận
Trong hướng dẫn này, chúng ta đã học cách so sánh hai bảng trên các cột cụ thể để tìm các bản ghi chưa khớp. Chúng tôi chỉ thấy một phương pháp. Tuy nhiên, bạn có thể thử các phương pháp khác bằng cách sử dụng THAM GIA và các hàm tổng hợp khác để tìm các bản ghi chưa khớp. Đó là tất cả trong hướng dẫn này. Hẹn gặp lại bạn trong bài hướng dẫn tiếp theo