Cách so sánh hai cột trong hai bảng khác nhau trong MySQL

Đây là giải pháp thay thế để kiểm tra nhanh và không phải là giải pháp chuyên nghiệp. Nó chỉ hoạt động với các cột số dưới dạng định danh, nếu không thì chuyển đổi các cột chuỗi thành số [đếm các chữ cái, chuyển đổi thành byte hoặc tương tự] nếu cần và NULL không có vấn đề gì

Cách giải quyết không chuyên nghiệp đầu tiên. mẫu

Cuối cùng, do các truy vấn mất quá nhiều thời gian trên bảng 1 Mio để so sánh với bảng khác đôi khi có giá trị NULL trong các trường cần quan tâm, nên tôi đã lấy khá nhiều mẫu số hàng đã chọn để kiểm tra sự khác biệt của hai . Tôi không tìm thấy bất kỳ sự khác biệt nào, nghĩ rằng dù sao chúng cũng giống hệt nhau

Cách giải quyết thứ hai chuyên nghiệp hơn một chút. tổng [] của các cột

Mặc dù mẫu đó có vẻ đủ, nhưng tôi muốn chắc chắn và tổng hợp tất cả các cột số, tôi thấy sự khác biệt

SELECT sum[col1], sum[col2] FROM table1
UNION
SELECT sum[col1], sum[col2] FROM table2

Đầu ra giống như

tổng[col1]tổng[col2]1111134567812345678910123411111123456123456789101234

Việc tổng hợp các cột hoặc toàn bộ bảng này là kiểm tra nhanh và nó thường đã trả lời câu hỏi chính và tiết lộ thêm nếu bạn nhóm bảng theo các thuộc tính thú vị

tổng kiểm tra

Nó hơi giống với giải pháp CHECKSUM trong MySQL

Tâm trí. mysql. , không phải Postgresql

CHECKSUM TABLE original_table, backup_table;

Bạn có thể tìm thấy những cách tốt hơn tại Làm cách nào tôi có thể nhận được hàm băm của toàn bộ bảng trong postgresql?

Vấn đề ở đây là nó chỉ là một Hash, thông tin như trong trường hợp của tôi, khi tôi có thể thấy từ tổng của col1 rằng phải có giá trị 0 hoặc NULL, bị mất

Bước tiếp theo. tìm sự khác biệt

Bước tiếp theo để tìm sự khác biệt là sắp xếp theo col1 trong cả hai bảng hoặc nhóm theo - count[] trên col1 nếu nó không phải là duy nhất

Bạn cũng có thể đã biết thuộc tính nào có thể là vấn đề và kiểm tra xem, trong trường hợp của tôi, tôi mới biết rằng một số col1 có thể là 0. Tổng 0 không có ý nghĩa gì, do đó tính ở đây và tổng của cột khác chứng minh sự khác biệt

SELECT count[col1], sum[col2] FROM table1 WHERE col1 = 0
UNION
SELECT count[col1], sum[col2] FROM table1 WHERE col1 = 0

đếm[col1]sum[col2]12341234567893456543210

Truy vấn ngược

SELECT count[col1], sum[col2] FROM table1 WHERE col1  0
UNION
SELECT count[col1], sum[col2] FROM table1 WHERE col1  0

và sau một thời gian, bạn may mắn tìm thấy các ứng viên hoặc sau một nhóm theo tổng quan mà bạn cũng có thể kiểm tra bằng cách trừ cái này với cái kia,

CHECKSUM TABLE original_table, backup_table;
0

Có lẽ bây giờ hãy chạy các truy vấn dài hạn

Nhưng ngay cả khi bây giờ bạn biết các tập lệnh nặng để tìm ra sự khác biệt thực sự khi kiểm tra toàn bộ bảng, thì ít nhất bạn cũng biết rằng việc chờ đợi một giờ trở lên hoàn toàn có ý nghĩa. . ]

gợi ý nhỏ. chọn vào một bảng mới

gợi ý nhỏ. nếu bạn chạy một truy vấn dài như vậy, trước tiên hãy xem xét việc lập chỉ mục. Ngoài ra, hãy kiểm tra xem bạn có thể trực tiếp tạo bảng từ kết quả sql hay không bằng cách sử dụng

Nếu bạn muốn biết hai bảng có khác nhau hay không, hãy chạy cái này

SELECT IF[COUNT[1]>0,'Differences','No Differences'] Comparison FROM
[
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT[1] rowcount
    FROM information_schema.columns
    WHERE table_schema=DATABASE[]
    AND table_name IN ['product_today','product_yesterday']
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT[1]=1
] A;

Nếu bạn thực sự cần thấy sự khác biệt, hãy chạy cái này

SELECT column_name,ordinal_position,data_type,column_type FROM
[
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT[1] rowcount
    FROM information_schema.columns
    WHERE table_schema=DATABASE[]
    AND table_name IN ['product_today','product_yesterday']
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT[1]=1
] A;

Nếu bạn muốn biết liệu hai bảng có khác nhau trong cơ sở dữ liệu

CHECKSUM TABLE original_table, backup_table;
1 hay không, hãy chạy lệnh này

SELECT IF[COUNT[1]>0,'Differences','No Differences'] Comparison FROM
[
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT[1] rowcount
    FROM information_schema.columns
    WHERE table_schema='mydb'
    AND table_name IN ['product_today','product_yesterday']
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT[1]=1
] A;

Nếu bạn thực sự cần thấy sự khác biệt, hãy chạy cái này

SELECT column_name,ordinal_position,data_type,column_type FROM
[
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT[1] rowcount
    FROM information_schema.columns
    WHERE table_schema='mydb'
    AND table_name IN ['product_today','product_yesterday']
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT[1]=1
] A;

Nếu bạn muốn biết liệu

CHECKSUM TABLE original_table, backup_table;
2 và
CHECKSUM TABLE original_table, backup_table;
3 có khác nhau hay không, hãy chạy cái này

________số 8

Nếu bạn thực sự cần thấy sự khác biệt, hãy chạy cái này

SELECT column_name,ordinal_position,data_type,column_type FROM
[
    SELECT
        column_name,ordinal_position,
        data_type,column_type,COUNT[1] rowcount
    FROM information_schema.columns
    WHERE
    [
        [table_schema='db1' AND table_name='tb1'] OR
        [table_schema='db2' AND table_name='tb2']
    ]
    AND table_name IN ['product_today','product_yesterday']
    GROUP BY
        column_name,ordinal_position,
        data_type,column_type
    HAVING COUNT[1]=1
] A;

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

MySQL So sánh hai bảng .
CHỌN t1. pk, t1. c1 TỪ t1 ĐOÀN KẾT TẤT CẢ CHỌN t2. pk, t2. c1 TỪ t2. .
CHỌN pk, c1 TỪ [ CHỌN t1. pk, t1. c1 TỪ t1 ĐOÀN KẾT TẤT CẢ CHỌN t2. pk, t2. c1 TỪ t2 ] t GROUP BY pk, c1 HAVING COUNT[*] = 1 ORDER BY pk

Làm cách nào để so sánh hai tên cột của bảng trong MySQL?

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

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

So sánh kết quả của hai truy vấn . bảng1 và bảng2. Ở đây, chúng ta sẽ sử dụng UNION ALL để kết hợp các bản ghi dựa trên các cột cần so sánh . Nếu các giá trị trong các cột cần so sánh giống nhau thì COUNT[*] trả về 2, ngược lại COUNT[*] trả về 1.

Làm cách nào để chọn hai cột khác nhau từ hai bảng khác nhau trong SQL?

Để làm như vậy, chúng ta cần sử dụng truy vấn nối để lấy dữ liệu từ nhiều bảng. .
CHỌN p. p_id, p. cus_id, p. p_name, c1. tên1, c2. tên2
TỪ sản phẩm NHƯ p
TRÁI THAM GIA khách hàng1 NHƯ c1
Trên P. cus_id=c1. cus_id
TRÁI THAM GIA khách hàng2 NHƯ c2
Trên P. cus_id = c2. cus_id

Chủ Đề