使用sql语句比较excel中数据的不同
使用sql语句比较excel中数据的不同
我所在的项目组是一套物流系统,负责与公司的电商系统进行对接。但是公司的电商系统的省市区的配置和物流系统的省市区的配置有差异,所以需要找到这些差异。
首先找到我们物流系统中所开站点的省份,物流没有开的站点省份,电商网站开了,不需要分别出站点的配置区别。
SELECT A.NAME 省, B.NAME 市, C.NAME 区
FROM BIS_PROVINCE A, BIS_CITY B
LEFT JOIN BIS_DISTRICT C
ON B.ID = C.CITY_ID
WHERE A.ID = B.PROVINCE_ID
AND A.NAME IN ('江苏省',
'江西省',
'安徽省',
'浙江省',
'山东省',
'河北省',
'湖北省',
'湖南省',
'陕西省',
'河南省',
'福建省',
'广东省',
'四川省',
'重庆市');
这个是物流系统所开设的站点的省份
接着创建两个临时表,分别存储物流系统的地址配置信息和电商系统的地址配置信息。
创建物流系统地址配置信息的临时表,代码如下:
CREATE TABLE WL_ZONE AS(
SELECT A.NAME 省, B.NAME 市, C.NAME 区
FROM BIS_PROVINCE A, BIS_CITY B
LEFT JOIN BIS_DISTRICT C
ON B.ID = C.CITY_ID
WHERE A.ID = B.PROVINCE_ID
AND A.NAME IN ('江苏省',
'江西省',
'安徽省',
'浙江省',
'山东省',
'河北省',
'湖北省',
'湖南省',
'陕西省',
'河南省',
'福建省',
'广东省',
'四川省',
'重庆市'));
再接着创建电商系统的地址配置信息表,同样的表结构,但是不复制信息,代码如下:
CREATE TABLE DH_ZONE AS
SELECT A.NAME 省, B.NAME 市, C.NAME 区
FROM BIS_PROVINCE A, BIS_CITY B
LEFT JOIN BIS_DISTRICT C
ON B.ID = C.CITY_ID
WHERE A.ID = B.PROVINCE_ID
AND A.NAME IN ('江苏省',
'江西省',
'安徽省',
'浙江省',
'山东省',
'河北省',
'湖北省',
'湖南省',
'陕西省',
'河南省',
'福建省',
'广东省',
'四川省',
'重庆市')
AND 1 = 0;
这个最后的1=0,作用就是值复制表的结构但是不复制表的数据。
注意:电商系统是将电商网站的地址信息导出成excel表格传给我,所以要将excel的数据保存到数据库中。
首先打开excel,在第一列的表头,右键--->插入,插入一列,然后复制所有信息,再在数据库中的临时表中DH_ZONE,粘贴,就可以将数据存储到数据库中了。
注:在excel的第一列前插入一列是关键。不然无法保存到数据库中
在进行地址信息的对比的时候有两种情况:
1.物流系统有这个地址而电商系统没有
2.电商系统有这个地址而物流系统没有
所以查找不同分这两种情况:
第一种:
SELECT WZ.省, WZ.市, WZ.区
FROM WL_ZONE WZ
WHERE NOT EXISTS (SELECT *
FROM DH_ZONE DZ
WHERE DZ.省 || '省' = WZ.省
AND DZ.市 || '市' = WZ.市
AND DZ.区 = WZ.区)
ORDER BY WZ.省;
第二种:
SELECT DZ.省, DZ.市, DZ.区
FROM DH_ZONE DZ
WHERE NOT EXISTS (SELECT *
FROM WL_ZONE WZ
WHERE DZ.省 || '省' = WZ.省
AND DZ.市 || '市' = WZ.市
AND DZ.区 = WZ.区)
ORDER BY DZ.省;
至于为什么where语句要写成
WHERE DZ.省 || '省' = WZ.省
AND DZ.市 || '市' = WZ.市
AND DZ.区 = WZ.区)
有两个原因:
1.电扇系统传给我的地址是只有省市区的名称,但是名称后缺少"省""市"
2.中国的四大直辖市,他们的省就是"北京市""重庆市""上海市""天津市"
所以要写成这样,其实这个直辖市的情况还可以用case when end语句进行判断。
使用sql语句比较excel中数据的不同的更多相关文章
- 如何用SQL语句查询Excel数据?
如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOp ...
- SQL点滴32—Excel中CONCATENATE函数生成SQL语句
原文:SQL点滴32-Excel中CONCATENATE函数生成SQL语句 当拿到一个Excel的时候需要将这里面的数据插入到数据库里面,该怎么办,除了使用SSIS数据导入之外还可以使用Excel中的 ...
- 【转载】SQL语句将一个表的数据写入到另一个表中
在日常的数据库运维过程中,有时候需要将Select查询出来的数据集写入到另一个数据表中,其中一种方式是通过存储过程循环写入数据,另一种简便的方式是直接使用Insert Into语句后面跟上Select ...
- 将Excel中数据导入数据库(二)
在上篇文章中介绍到将Excel中数据导入到数据库中,但上篇文章例子只出现了nvachar类型,且数据量很小.今天碰到将Excel中数据导入数据库中的Excel有6419行,其中每行均有48个字段,有i ...
- Mysql中文乱码以及导出为sql语句和Excel问题解决
Mysql中文乱码以及导出为sql语句和Excel问题解决 这几天基于Heritrix写了一个爬虫,用到mysql,在导入导出数据时,遇到一些乱码问题,好不容易解决了,记录一下,以备查看.一.导出数据 ...
- 将Excel中数据导入数据库(三)
上篇文章将Excel中数据导入数据库时,将从Excel读入的数据均转换成了数据库相应字段的类型,其实这是没有必要的,因为对于数据库各种类型的插入,均可以字符串格式插入.比如表WQ_SWMSAR_A字段 ...
- 一条SQL语句在MySQL中如何执行的
本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL 的基础架构, ...
- 一条SQL语句在MySQL中是如何执行的
概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 mysql主要分为Server层和存储 ...
- 转:Oracle中SQL语句执行过程中
Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...
随机推荐
- 解决centos的mysql服务3306端口无法远程连接10038问题
之前一期说过在centos下安装宝塔控制面板,当登陆进去新建了数据库,然后在windows使用navicat for mysql 远程连接数据库一直失败,没有解决就先用阿里的RDS先用着,直到近期找到 ...
- MySQL 在Windows平台上的安装及实例多开
MySQL在Windows平台上的安装及实例多开 by:授客 QQ:1033553122 测试环境 Win7 64 mysql-5.7.20-winx64.zip 下载地址: https://cd ...
- Android 直接修改dex破解
直接修改dex破解 一.编写一个简单的验证程序 (1)MainActivity: protected void onCreate(BundlesavedInstanceState) { super.o ...
- The value of ESP was not properly saved across a function call 快速解决
The value of ESP was not properly...快速解决 今天遇到这个问题,真的是非常头疼,期间电脑居然崩掉一次.所以,分享一下解决办法. 如果是:类定义的时候,新添加了属性, ...
- Spring整合ActiveMq消息队列
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久 ...
- [译]在Linux上的提高MySQL/MariaDB安全性的12条建议
MySQL 是世界上最流行的开源数据库系统,而MariaDB(MySQL的一个分支)是世界上发展最快的开源数据库系统.安装MySQL服务器之后,它的默认配置是不安全的,保护它是一般数据库管理中的基本任 ...
- c/c++ 标准库 bind 函数 详解
标准库 bind 函数 详解 bind函数:接收一个函数名作为参数,生成一个新的函数. auto newCallable = bind(callbale, arg_list); arg_list中的参 ...
- Python 面向对象的特性2-----继承
面向对象的三大特性 1.封装 根据职责将属性和方法封装到一个抽象的类中,然后类创建一个实实在在的对象,有了对象以后,就可以访问到对象内部的属性,或者让对象来调用一个已经封装好的方法. 2.继承 实现代 ...
- CentOS7安装redis数据库及php-redis扩展
redis 首先把redis安装到服务器中 1.wget http://download.redis.io/redis-stable.tar.gz 下载redis源码 2. tar xvzf redi ...
- 【转载】ubuntu下/usr/bin和/usr/local/bin的区别
这篇文章已经无法考证是谁原创的了 首先注意usr 指 Unix System Resource,而不是User 然后通常: /usr/bin下面的都是系统预装的可执行程序,会随着系统升级而改变. /u ...