使用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,这过程有点像程序编译,检查语法.表名.字 ...
随机推荐
- leetcode-973最接近原点的K个点
leetcode-973最接近原点的K个点 题意 我们有一个由平面上的点组成的列表 points.需要从中找出 K 个距离原点 (0, 0) 最近的点. (这里,平面上两点之间的距离是欧几里德距离.) ...
- Kotlin入门(21)活动页面的跳转处理
Activity的活动页面跳转是App最常用的功能之一,在前几章的demo源码中便多次见到了,常常是点击界面上的某个按钮,然后跳转到与之对应的下一个页面.对于App开发者来说,该功能的实现非常普通,使 ...
- 移动Web前端,游客点击商品的收藏按钮,登录完成,回来之后,如何自动收藏
我们都知道,移动Web端(M站环境下),很多时候,前端是无法判断用户的登录状态的,因为出于安全性考虑,与账号相关的cookie字段一般都是 http-only的. 如果前端想判断用户的登录状态,需要主 ...
- mysql练习----Self join
stops(id, name) route(num,company,pos, stop) stops route id num name company pos stop
- [20181214]open file using O_DIRECT.txt
[20181214]open file using O_DIRECT.txt --//因为一个测试需要,需要写一个测试小例子,验证使用O_DIRECT打开文件每次都是从磁盘读取.--//没想到浪费1个 ...
- Spring MVC 异常处理 (九)
完整的项目案例: springmvc.zip 目录 实例 除了依赖spring-webmvc还需要依赖jackson-databind(用于转换json数据格式) <dependency> ...
- c/c++赋值函数(重载=号运算符)
c/c++赋值函数(重载=号运算符) 首先c++里的各种运算符都是用函数实现的,比如=,就等号函数. 所以当用=给一个对象赋值的时候,实际调用的是=号所对应的=号函数. 分析下面的代码 #includ ...
- Win10 C盘桌面文件右上方的两个蓝色箭头解决方案
之前看网上有很多桌面蓝色箭头的解决方案,也进行了一些尝试 可是每次Win10系统更新之后蓝色箭头就会重新显示. 最终方案:将建立在桌面的C盘文件移到D盘,桌面创建对应的快捷方式. 一劳永逸,暴力破解.
- Java高级教程
目录 1.Java面向对象方法 1.1. 创建类和对象的方法 1.2. this的使用 1.3. 静态域和静态方法 1.3.1. 静态域:属于类的级别 1.3.2.静态常量 1.3.3 静态方法 1. ...
- Go学习笔记05-指针
目录 参数传递 var a int = 2 var pa *int = &a *pa = 3 fmt.Println(a) Go语言中 指针不能运算 参数传递 不像C++.Java.Pytho ...