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

Cách so sánh hai bảng trong MySQL

Đôi khi bạn có thể cần so sánh hai bảng trong MySQL để tìm các bản ghi phù hợp hoặc các bản ghi chưa khớp. Đây là truy vấn SQL để so sánh hai bảng trong MySQL.

Cách so sánh hai bảng trong MySQL

Dưới đây là các bước để so sánh hai bảng trong MySQL. Có các trường hợp sử dụng khác nhau để so sánh hai bảng trong SQL. Chúng ta sẽ xem xét từng người một. Giả sử bạn có 2 bảng sau đơn đặt hàng (id, order_date, amount) order2 (id, order_date, số lượng) có 2 bản ghi giống nhau.

mysql> create table orders(id int, order_date date, amount int);

mysql> insert into orders(id, order_date, amount)
     values(1,'2020-07-25',250),
     (2,'2020-07-26',350),
     (3,'2020-07-27',200),
     (4,'2020-07-28',150);

mysql> select * from orders;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-25 |    250 |
|    2 | 2020-07-26 |    350 |
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
+------+------------+--------+

mysql> create table orders2(id int, order_date date, amount int);

mysql> insert into orders2(id, order_date, amount)
     values(3,'2020-07-27',200),
     (4,'2020-07-28',150),
     (5,'2020-07-29',250),
     (6,'2020-07-30',300);

mysql> select * from orders2;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
|    5 | 2020-07-29 |    250 |
|    6 | 2020-07-30 |    300 |
+------+------------+--------+

Phần thưởng đọc:Cách nhận dữ liệu một tháng trước trong MySQL

MySQL So sánh hai cột từ các bảng khác nhau

Giả sử bạn chỉ muốn so sánh hai cột (ví dụ:id) từ hai bảng đơn đặt hàng khác nhau và đơn đặt hàng2. Đây là truy vấn SQL để so sánh hai cột từ các bảng khác nhau và chọn các bản ghi phù hợp.

mysql> select * from orders
       where id in
       (select id from orders2);
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
+------+------------+--------+

Trong truy vấn trên, chúng tôi chọn các bản ghi từ các đơn đặt hàng có id giá trị cột có trong danh sách id giá trị cột thu được từ đơn hàng 2 bằng truy vấn con.

Tương tự, nếu bạn muốn so sánh hai cột và chọn bản ghi không khớp, hãy cập nhật truy vấn ở trên bằng cách thêm từ khóa NOT trước IN, như được hiển thị bên dưới.

mysql> select * from orders
            where id NOT in
            (select id from orders2);
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-25 |    250 |
|    2 | 2020-07-26 |    350 |
+------+------------+--------+

Phần thưởng đọc:Cách sao chép bảng trong MySQL

MySQL So sánh hai bảng để tìm các bản ghi phù hợp

Nếu bạn đang muốn so sánh hai bảng và tìm các bản ghi phù hợp dựa trên nhiều cột, thì đây là truy vấn SQL. Giả sử bạn muốn tìm các bản ghi giống hệt nhau bằng cách so sánh nhiều cột id, order_date, số lượng

Đầu tiên, chúng tôi thực hiện LIÊN KẾT TẤT CẢ hai bảng để giữ lại các hàng trùng lặp.

mysql> select id, order_date, amount
     from orders
     union all
     select id, order_date, amount
     from orders2;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-25 |    250 |
|    2 | 2020-07-26 |    350 |
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
|    5 | 2020-07-29 |    250 |
|    6 | 2020-07-30 |    300 |
+------+------------+--------+

Tiếp theo, chúng tôi thực hiện GROUP BY để đếm các bản ghi theo id, order_date và số lượng cột để tìm các bản ghi có số lượng> 1, đó là các bản ghi xuất hiện nhiều hơn một lần. Chúng tôi sử dụng truy vấn trên làm truy vấn con.

mysql> select id, order_date, amount
       from (
           select id, order_date, amount
           from orders
           union all
           select id, order_date, amount
           from orders2)
       temp
       group by id, order_date, amount
       having count(*)>1;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    3 | 2020-07-27 |    200 |
|    4 | 2020-07-28 |    150 |
+------+------------+--------+

Phần thưởng Đọc:Cách thêm ràng buộc NOT NULL trong MySQL

MySQL So sánh hai bảng để tìm các bản ghi chưa khớp

Tương tự, đây là cách so sánh hai bảng để tìm các cột chưa khớp trong MySQL. Trong truy vấn trên, thay vì sử dụng count (*)> 1, chúng tôi sử dụng điều kiện count (*) =1, đó là các bản ghi chỉ xảy ra một lần.

Đây là SQL để so sánh hai bảng và tìm các bản ghi không trùng khớp.

mysql> select id, order_date, amount
       from (
         select id, order_date, amount
         from orders
         union all
         select id, order_date, amount
         from orders2)
       temp
       group by id, order_date, amount
      having count(*)=1;
+------+------------+--------+
| id   | order_date | amount |
+------+------------+--------+
|    1 | 2020-07-25 |    250 |
|    2 | 2020-07-26 |    350 |
|    5 | 2020-07-29 |    250 |
|    6 | 2020-07-30 |    300 |
+------+------------+--------+

Phần thưởng Đọc:Cách thêm Ràng buộc Mặc định trong MySQL

MySQL so sánh hai bảng từ các cơ sở dữ liệu khác nhau

Tương tự, nếu bạn muốn so sánh hai bảng thứ tự và thứ tự2 từ các cơ sở dữ liệu khác nhau lần lượt là db1 và db2, chỉ cần đặt tiền tố tên cơ sở dữ liệu trước tên bảng bằng dấu chấm (.)

Đây là truy vấn SQL để so sánh hai bảng từ các cơ sở dữ liệu khác nhau và nhận các bản ghi phù hợp.

mysql> select id, order_date, amount
       from (
           select id, order_date, amount
           from db1.orders
           union all
           select id, order_date, amount
           from db2.orders2)
       temp
       group by id, order_date, amount
       having count(*)>1;

Và đây là truy vấn SQL để so sánh hai bảng từ các cơ sở dữ liệu khác nhau và nhận các bản ghi chưa trùng khớp.

mysql> select id, order_date, amount
       from (
           select id, order_date, amount
           from db1.orders
           union all
           select id, order_date, amount
           from db2.orders2)
       temp
       group by id, order_date, amount
       having count(*)>1;

Hy vọng rằng bây giờ bạn có thể so sánh hai bảng trong MySQL

Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LỖI 1396 (HY000):Thao tác CREATE USER không thành công cho 'jack' @ 'localhost'

  2. Làm cách nào để điền menu thả xuống thứ hai dựa trên lựa chọn của menu thả xuống đầu tiên bằng cách sử dụng jQuery / AJAX và PHP / MySQL?

  3. # 1055 - Biểu thức của danh sách SELECT không nằm trong mệnh đề GROUP BY và chứa cột không được tổng hợp, cột này không tương thích với sql_mode =only_full_group_by

  4. Cách cài đặt và cấu hình phpMyAdmin trên CentOS 6

  5. kết quả truy vấn tổng hợp mysql với GROUP BY