SQL基础(四)-- SQL连接时去掉重复数据
一、关键词 DISTINCT 用于返回唯一不同的值,只可以在select中使用。
1.重复数据完全一样,用distinct
select distinct * from table
根据字段去重用distinct
select distinct 列名称 from 表名称 (对一列进行操作)
select distinct 列名称1,列名称2 from 表名称(对多列进行操作):对多列操作,表示选取 多列都不重复的数据,相当于 多列拼接的记录 的整个一条记录 , 不重复的记录。
注意:(1). DISTINCT 必须放在第一个参数。(2).DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,相当于 把 SELECT 表达式的项 拼接起来选唯一值。
二、sysno列不同,sysno类型为int,自增字段,使用聚合函数max或其他
左连接重复数据表时:先过滤掉有表重复数据
SELECT * FROM table1 WITH(NOLOCK) A
LEFT JOIN table2 soEx ON A.SOSysNo=soEx.SOSysNo AND soEx.ExtensionName='IsConfirm'
WHERE soEx.SysNo IN(SELECT MAX(SysNo) FROM table WHERE SOSysno=A.SOSysNo)
三、使用row_number() over()和partition by给每一组添加行号
row_number() over()分组排序功能:
在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where group by order by 的执行。
partition by 用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组,它和聚合函数不同的地方在于它能够返回一个分组中的多条记录,而聚合函数一般只有一个反映统计值的记录。
select * from
(select *, ROW_NUMBER() over (partition by 分组字段(可多个) order by 排序字段) RowNum from 表) AS Result
where RowNum=1
先分组排序,再取出每组的第一条记录进行“去重”