关注微信公众号: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 ... ...
去核对,这种效率低且单调。我们要学会跳出思维圈,利用一些辅助工具去帮助自己更好的工作,更好的去解决问题。