Làm cách nào để so sánh hai bảng khác nhau trong MySQL?

Giả sử bạn có yêu cầu so sánh hai bảng. Bạn có hai bảng trong cùng một cơ sở dữ liệu hoặc máy chủ mà bạn muốn so sánh và kiểm tra xem có bất kỳ thay đổi nào trong các giá trị cột hay không hoặc xem có hàng nào bị thiếu trong một trong hai bảng không

Dưới đây là một số phương pháp bạn có thể sử dụng để so sánh hai bảng trong SQL

So sánh hai bảng bằng UNION ALL

UNION cho phép bạn so sánh dữ liệu từ hai bảng hoặc tập dữ liệu tương tự. Nó cũng xử lý các giá trị NULL thành các giá trị NULL khác mà mệnh đề JOIN hoặc WHERE không xử lý. Nó cho phép nhanh chóng kiểm tra dữ liệu bị thiếu hoặc thay đổi trong một trong hai bảng

Select * from ( 
Select Id_pk, col1, col2...,coln from table1, ‘Old_table’ 
Union all 
Select Id_pk, col1, col2...,coln from table2, 'New_tbale' 
) cmpr order by Id_pk;

Truy vấn trên trả về tất cả các hàng từ cả hai bảng là cũ và mới. Bạn có thể nhanh chóng xác minh sự khác biệt giữa hai bảng

đọc liên quan. Các bước để tối ưu hóa hiệu suất truy vấn SQL

So sánh hai bảng sử dụng MINUS

Bạn có thể so sánh hai bảng hoặc tập dữ liệu tương tự bằng cách sử dụng toán tử TRỪ. Nó trả về tất cả các hàng trong bảng 1 không tồn tại hoặc bị thay đổi trong bảng khác

Select Id_pk, col1, col2...,coln from table1 
MINUS
Select Id_pk, col1, col2...,coln from table2;

Bạn có thể nhanh chóng kiểm tra xem có bao nhiêu bản ghi không khớp giữa hai bảng

Hạn chế duy nhất khi sử dụng UNION và MINUS là các bảng phải có cùng số cột và các kiểu dữ liệu phải khớp nhau

So sánh hai bảng bằng THAM GIA

Đây là cách dễ nhất nhưng người dùng phải thực hiện một số công việc bổ sung để có kết quả chính xác. Theo cách tiếp cận này, bạn có thể nối hai bảng trên khóa chính của hai bảng và sử dụng câu lệnh tình huống để kiểm tra xem cột cụ thể có khớp giữa hai bảng không

Select case when A.col1 = B.col1 then ‘Match’ else ‘Mismatch’ end as col1_cmpr, 
case when A.col2 = B.col2 then ‘Match’ else ‘Mismatch’ end as col2_cmpr, …. 
from table1 A
Join table2 B
on (A.id_pk = B.id_pk) ;

Hạn chế duy nhất của việc sử dụng THAM GIA là nó không thể so sánh các giá trị NULL và bạn nên sử dụng NVL trên cột có thể có giá trị null trong đó

So sánh hai bảng sử dụng NOT EXISTS

Phương pháp khác nhanh hơn là sử dụng mệnh đề NOT EXISTS trong WHERE của truy vấn. Phương pháp này nhanh hơn và hoạt động tốt trên khối lượng dữ liệu lớn

Select id_pk, col1, col2,col,…
From table1 A
Where NOT EXISTS
( select 1 from table2 B
Where A.id_pk = B.id_pk
and A.col1 = B.col1
and A.col2 = B.col2
and…
);

Theo cách tiếp cận này, bạn cũng phải sử dụng NVL trên các cột chứa NULL trong đó

So sánh các ô từ hai bảng – Xác thực ô theo ô

Bạn có thể sử dụng câu lệnh CASE để so sánh các bản ghi từ cả hai bảng và kiểm tra xem các ô từ cả hai bảng có khớp không

Ví dụ: ví dụ sau minh họa ô bằng cách xác thực ô

SELECT CASE
         WHEN Nvl(a.id :: VARCHAR, 'NULL' :: VARCHAR) = Nvl (b.id :: VARCHAR,'NULL' :: VARCHAR) THEN
         'Matched'
         ELSE Nvl(a.id :: VARCHAR, 'NULL' :: VARCHAR)
              ||','
              || Nvl(b.id :: VARCHAR, 'NULL' :: VARCHAR)
       END id,
       CASE
         WHEN Nvl(a.name :: VARCHAR, 'NULL' :: VARCHAR) =
              Nvl (b.name :: VARCHAR,'NULL' :: VARCHAR) THEN
         'Matched'
         ELSE Nvl(a.name :: VARCHAR, 'NULL' :: VARCHAR)
              ||','
              || Nvl (b.name :: VARCHAR, 'NULL' :: VARCHAR)
       END name,
       CASE
         WHEN Nvl(a.addr :: VARCHAR, 'NULL' :: VARCHAR) =
              Nvl (b.addr :: VARCHAR,'NULL' :: VARCHAR) THEN
         'Matched'
         ELSE Nvl(a.addr :: VARCHAR, 'NULL' :: VARCHAR)
              ||','
              || Nvl (b.addr :: VARCHAR, 'NULL' :: VARCHAR)
       END addr
FROM   test_tab1 a
       full outer join test_tab2 b
                    ON Nvl(a.id :: VARCHAR, 'NULL' :: VARCHAR) =
                       Nvl (b.id :: VARCHAR, 'NULL' :: VARCHAR) ;

+---------+----------+------------+
| ID      | NAME     | ADDR       |
|---------+----------+------------|
| Matched | Matched  | Matched    |
| Matched | Matched  | Matched    |
| Matched | Matched  | adr3,adr-  |
| Matched | ddd,dd   | Matched    |
| Matched | eee,NULL | adr5,NULL  |
| NULL,6  | NULL,zzz | NULL,zaddr |
| 7,NULL  | yyy,NULL | yaddr,NULL |
+---------+----------+------------+

Bạn có thể sử dụng LEFT OUTER JOIN hoặc INNER JOIN nếu bạn biết số lượng bảng phù hợp

Nhận số lượng khớp và chưa khớp từ hai bảng

Bạn có thể sử dụng phép nối ngoài đầy đủ để nhận các bản ghi khớp và chưa khớp hoặc đếm từ hai bảng có các cột chung trong đó

SELECT
Sum(CASE WHEN t1.file_name IS NOT NULL AND t2.file_n IS NOT NULL THEN 1
ELSE 0 END) AS matched_count,
Sum( CASE WHEN t1.file_name IS NOT NULL AND t2.file_n IS NOT NULL THEN 0
ELSE 1 END) AS un_matched_count
FROM assessment_file_query_mapping AS t1
FULL OUTER JOIN
(
SELECT *
FROM (SELECT DISTINCT regexp_split_to_table(files, e',') AS file_n
FROM job_info) AS a
WHERE length(trim(file_n)) <>0 ) AS t2
ON trim(t1.file_name) = trim(file_n);

Chúng tôi đang kiểm tra số lượng tệp trùng khớp và chưa khớp từ hai bảng. Ví dụ sử dụng biểu thức chính quy để chia các bản ghi được phân tách bằng dấu phẩy thành bảng và sau đó nối trên cột tên tệp chung

Làm cách nào để so sánh nhiều bảng trong MySQL?

So sánh hai bảng trong MySQL .
Đầ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

Làm cách nào để kiểm tra hai bảng trong MySQL?

MySQL so sánh hai bảng từ các cơ sở dữ liệu khác nhau . mysql> chọn id, order_date, số tiền từ ( chọn id, order_date, số tiền từ db1

Làm cách nào để so sánh hai bảng cơ sở dữ liệu?

So sánh dữ liệu cơ sở dữ liệu .
Từ menu chính, vào Công cụ -> Máy chủ SQL -> So sánh dữ liệu mới. .
Xác định cơ sở dữ liệu nguồn và đích. .
Chọn các hộp kiểm cho các bảng và dạng xem mà bạn muốn so sánh

Làm cách nào để so sánh dữ liệu trong MySQL?

Trong MySQL, bạn có thể sử dụng toán tử >= để kiểm tra biểu thức lớn hơn hoặc bằng . CHỌN * TỪ danh bạ WHERE contact_id >= 50; .