首页 > 数据库技术 > 详细

深入理解SQL查询--关于重复数据

时间:2019-04-10 15:35:48      阅读:204      评论:0      收藏:0      [点我收藏+]

SQL比较重要的一块语法就是各种关联 inner join 和  left join 是最常用的

但是很多人工作了许久之后还是没能深入理解关联关系 导致偶尔会出现主键重复

1 select 债券代码,交易市场 ,count(*) -- 查重主键
2 from
3 (
4 -- 加入需要查重的代码
5 )a
6 group by 债券代码,交易市场 
7 having count(*)>1

用以上这段代码可以进行查重 

 

我就联系实际简单说明一下

首先提出一个问题 : 

Q: 如果select * from A inner join B on A.a=B.b

A表的数据条数是n 

B表的数据条数是m

那么结果集的数据条数范围是多少 ?

一般来说是小于等于n

把inner join 比作是找对象 A表和B表的主键找对象 找到了对象留下 放在结果集中 没找到的走开

那结果条数应该不会大于n才对

但事实呢 

结果条数可以大于n

但是  如果A表的a列 在 B表的b列找到了多个对象 结果会是怎样呢 ?

 

 1 select * from
 2 (
 3     select a=1,c=1
 4 )a
 5 inner join
 6 (
 7     select b=1,c=2
 8     union all
 9     select b=1,c=3
10 )b on a.a=b.b

执行一下上面的SQL语句 结果是会返回2条数据 

inner join 换成 left join 结果是一样的

理解这个对于写出不重复的SQL很重要

-------------------------

我们可以简单的这样理解 SQL关联像是找对象 , 而每个表(A和B)中的字段都是结果集的一个标签 , 也就是列 columns

你可以在最外面的select语句后面对这些标签字段进行各种处理 比如case when 然后返回新的标签列 用 as 命名

 

深入理解SQL查询--关于重复数据

原文:https://www.cnblogs.com/chendongblog/p/10683539.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!