Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100074
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 431
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-13 14:21
文章分类
文章存档

2014年(2)

2013年(42)

我的朋友

分类: Mysql/postgreSQL

2013-11-14 09:08:41

mysql删除子查询中的记录语句
 
?
1
2
3
4
5
6
Sql代码 
delete from t_5star where  locationid in  ( 
      select e.locationid  from  ( 
            select a.*  from t_5star as a , 
            t_als_data as b where a.term =  b.term ) e  

 

关键是子查询中的语句要放到单一e的表中
 
查询及删除重复记录的方法
(一)
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sql代码 
select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 
2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
3、查找表中多余的重复记录(多个字段)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

 

(二)
比方说
在A表中存在一个字段“name”,
而且不同记录之间的“name”值有可能会相同,
?
1
2
3
4
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
Select Name,Count(*) From A Group By Name Having Count(*) > 1
如果还查性别也相同大则如下:
Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1

 
拓展阅读:

阅读(959) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~