度量快速开发平台-专业、快速的软件定制快开平台
标题:
SQL查询重复数据和清除重复数据(一)
[打印本页]
作者:
万望
时间:
2020-4-18 23:05
标题:
SQL查询重复数据和清除重复数据(一)
本帖最后由 万望 于 2016-5-18 23:07 编辑
选择重复,消除重复和选择出序列
QQ截图20160518230144.jpg
(5.36 KB, 下载次数: 119)
下载附件
保存到相册
2020-4-18 23:02 上传
要求:
列出所有名字重复的人的记录
(
1
)最直观的思路:要知道所有名字有重复人资料,首先必须知道哪个名字重复了:
select name from emp group by name having count(*)>1
复制代码
所有名字重复人的记录是:
select * from emp where name in (select name from emp group by name having count(*)>1)
复制代码
(
2
select * from emp where (select count(*) from emp e where e.name=emp.name) >1
复制代码
)稍微再聪明一点,就会想到,如果对每个名字都和原表进行比较,大于2个人名字与这条记录相同的就是合格的 ,就有
--
注意一下这个>1,想下如果是 =1,如果是 =2 如果是>2 如果 e 是另外一张表 而且是=0那结果 就更好玩了
select * from emp
where exists
(select * from emp e where e.name=emp.name and e.emp_no<>emp.emp_no)
复制代码
这个过程是 在判断工号为001的 人 的时候先取得 001的 名字(emp.name) 然后和原表的名字进行比较 e.name
注意e是emp的一个别名。
再稍微想得多一点,就会想到,如果有另外一个名字相同的人工号不与她他相同那么这条记录符合要求:
此思路的join写法:
select
emp.
*
from
emp,emp e
where emp.name
=
e.name
and
emp.emp_no
<>
e.emp_no
/* 这个语句较规范的 join 写法是
select emp.* from emp inner join emp e on emp.name=e.name and emp.emp_no<>e.emp_no
但个人比较倾向于前一种写法,关键是更清晰
*/
作者:
万望
时间:
2020-4-18 23:08
作者:
陈晓龙
时间:
2020-4-19 15:28
这个还是比较实用的!
欢迎光临 度量快速开发平台-专业、快速的软件定制快开平台 (http://p.delit.cn/)
Powered by Discuz! X3.2