使用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中数据的不同的更多相关文章

  1. 如何用SQL语句查询Excel数据?

    如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOp ...

  2. SQL点滴32—Excel中CONCATENATE函数生成SQL语句

    原文:SQL点滴32-Excel中CONCATENATE函数生成SQL语句 当拿到一个Excel的时候需要将这里面的数据插入到数据库里面,该怎么办,除了使用SSIS数据导入之外还可以使用Excel中的 ...

  3. 【转载】SQL语句将一个表的数据写入到另一个表中

    在日常的数据库运维过程中,有时候需要将Select查询出来的数据集写入到另一个数据表中,其中一种方式是通过存储过程循环写入数据,另一种简便的方式是直接使用Insert Into语句后面跟上Select ...

  4. 将Excel中数据导入数据库(二)

    在上篇文章中介绍到将Excel中数据导入到数据库中,但上篇文章例子只出现了nvachar类型,且数据量很小.今天碰到将Excel中数据导入数据库中的Excel有6419行,其中每行均有48个字段,有i ...

  5. Mysql中文乱码以及导出为sql语句和Excel问题解决

    Mysql中文乱码以及导出为sql语句和Excel问题解决 这几天基于Heritrix写了一个爬虫,用到mysql,在导入导出数据时,遇到一些乱码问题,好不容易解决了,记录一下,以备查看.一.导出数据 ...

  6. 将Excel中数据导入数据库(三)

    上篇文章将Excel中数据导入数据库时,将从Excel读入的数据均转换成了数据库相应字段的类型,其实这是没有必要的,因为对于数据库各种类型的插入,均可以字符串格式插入.比如表WQ_SWMSAR_A字段 ...

  7. 一条SQL语句在MySQL中如何执行的

    本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL 的基础架构, ...

  8. 一条SQL语句在MySQL中是如何执行的

    概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架构分析 mysql主要分为Server层和存储 ...

  9. 转:Oracle中SQL语句执行过程中

    Oracle中SQL语句执行过程中,Oracle内部解析原理如下: 1.当一用户第一次提交一个SQL表达式时,Oracle会将这SQL进行Hard parse,这过程有点像程序编译,检查语法.表名.字 ...

随机推荐

  1. 8.Odoo产品分析 (二) – 商业板块(3) –CRM(2)

    查看Odoo产品分析系列--目录 接上一篇Odoo产品分析 (二) – 商业板块(3) –CRM(1) 4. 设置 在配置–>设置中:    在分析"销售"模块时已经将其他的 ...

  2. JAVA项目从运维部署到项目开发(二.ZooKeeper)

    一.zookeeper的相关介绍 点击查看 二.下载.安装与配置 1.ZooKeeper官网下载地址(点击跳转),当前稳定版本为V3.4.12.Liniux下可以在指定目录,使用wget命令下载. h ...

  3. 口碑点餐相关问题FAQ

    1.菜品上传中:出现重复错误或者违禁词 检查并修改商家中心本次上传中的重复菜品,或者删除口碑掌柜以及第三方平台已添加的重复菜品(重复菜品临时快捷办法:修改菜品名称) 2.手持pos 打开自动接单,无响 ...

  4. SMB协议利用之ms17-010-永恒之蓝漏洞抓包分析SMB协议

    SMB协议利用之ms17-010-永恒之蓝漏洞抓包分析SMB协议 实验环境: Kali msf以及wireshark Win7开启网络共享(SMB协议) 实验步骤: 1.查看本机数据库是否开启,发现数 ...

  5. vmWare 虚机文件不能启动的事故处理

    由于公司停电,导致几十台vmWare虚拟机器启动报错. 错误:Failed to power on virtual machine XXX. Failed to lock the file Click ...

  6. FastCGI Error Number: 5 (0x80070005).

    在访问网站的时候,出现了以上这个错误: 在网上搜了很多方法,归纳起来就如下几种: 1, 网站安全狗]的安全策略问题 解决方案: 主动防御/禁止IIS执行程序 添加"php\php-cgi.e ...

  7. 联想x3650m5服务器安装windows2008R2系统

    服务器型号:联想x3650 M5 2U服务器 硬盘:一块300G硬盘 阵列:raid0 系统:windowsserver2008R2系统 安装开始时间:20180930晚上9点 客户手里有window ...

  8. Servlet(五):一个Servlet处理多个请求

    一.为什么要使用一个Servlet来处理多个请求? 当浏览器发送了一次请求到服务器时,servlet容器会根据请求的url-pattern找到对应的Servlet类,执行对应的doPost或doGet ...

  9. (转)Spring Boot(七):Mybatis 多数据源最简解决方案

    http://www.ityouknow.com/springboot/2016/11/25/spring-boot-multi-mybatis.html 说起多数据源,一般都来解决那些问题呢,主从模 ...

  10. SQLite 知识摘要 --- 线程模式、事务模式

    本篇主要从SQLite事务执行的原理中寻找如何更高效地使用它. 本篇预备知识 我们先来了解下SQLite执行事务的基本流程,状态变化过程,再分析怎么使用才更优.SQLite定义的锁的状态有如下几种: ...