
關注微信公眾號:CodingTechWork,一起學習進步。
引言
在線上運維的過程中,遇到一個頭疼的事情,有一些合作公司的數據直接從平台上down下來是一個excel,然后發到研發手里去數據庫中核對是否存在,怎么辦呢?一般死腦筋方法就是使用sql語句select * from tb_name where colume_name="xxx";去核對是否存在該記錄,完了,完全陷入到非sql不可的坑了。
在思考如何更好的去比對兩堆類型相同的數據時,除了程序員用后端的方法(不管是sql還是寫腳本、程序工具類),其實還可以跳出這個思維圈,本文就總結一下如何通過我們日常用到的excel來比對兩個數據表,當然我們也要解決表數據轉為excel的問題。
sql轉excel
方式
我們先要解決一個mysql數據庫中的數據如何轉出到excel中的問題。
進入到sql命令行選擇數據庫后,執行:select * from tbl_name into outfile '/home/outfile/test.xls';
問題
我們可能會遇到一個ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement的報錯,這個時候可以使用show variables like '%secure%';查看:
mysql> show variables like '%secure%';
+--------------------------+-----------------------+
| Variable_name | Value |
+--------------------------+-----------------------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | /var/lib/mysql-files/ |
+--------------------------+-----------------------+
3 rows in set (0.01 sec)
所以,我們可以在不修改數據庫的權限情況下,選擇這個默認路徑進行輸出:select * from tbl_name into outfile '/var/lib/mysql-files/test.xls';
mysql數據轉為excel這個問題解決后,我們就可以安心去解決excel中如何比對兩個不同表格中的數據。
表達式
我們先來了解一下今天登場的主角:IF(COUNTIF())表達式。
分解
=IF(COUNTIF(Sheet1!A:A,A1),"T","F")
IF():IF()是條件判斷函數;COUNTIF():是統計函數,其中,Sheet1代表的是另一個表格的數據,A:A表示統計區域,A1表示A1單元格的內容。"T":可自定義引號內的文字,是if如果成立,則會在單元格中輸出該自定義內容。"F":可自定義引號內的文字,是if如果不成立,則會在單元格中輸出該自定義內容。
操作詳解
場景說明
假設Sheet1為參考數據,Sheet2為需要比對的數據。比對Sheet2中是否在Sheet2中有相同的數據。


操作步驟
- 填寫表達式:
=IF(COUNTIF(Sheet1!A:A,A1),"T","F")並回車。
基准表格數據是在Sheet1中,比對的范圍是A:A,單元格是在A1。T表示Sheet2中的這個數據在Sheet1中存在,F表示不存在。

- 下拉比對

結果顯示:

注意:
比對結果的描述信息可以自定義

總結
至此,我們就學會如何通過表達式來比對完兩個數據表中的數據,是不是很贊?遇到問題的時候,我們不能死教條,一個一個的通過select * from ... ...去核對,這種效率低且單調。我們要學會跳出思維圈,利用一些輔助工具去幫助自己更好的工作,更好的去解決問題。
