SQL 取重复数据中ID号最小的数据
2009-08-05 11:30
471 查看
数据库操作中尽量不要使用条件“IN”语句
CREATE TABLE `zhoz_mst` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 66 ) NOT NULL ,
`kana` VARCHAR( 66 ) ,
`zz` VARCHAR( 66 ) NOT NULL
) ENGINE = MYISAM ;
插入测试数据:
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'aaa', 'bbb', 'ccc');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'aaa', 'bbb2', '2');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'aaa', 'bbb', '3');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'aaa', 'bbb', '4');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'a', 'b', '5');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'a', NULL, '6');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'a', NULL, '7');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'a', 'b', '8');
1 aaa bbb ccc
2 aaa bbb2 2
3 aaa bbb 3
4 aaa bbb 4
5 a b 5
6 a NULL 6
7 a NULL 7
删除保存最小ID:
select a.id, a.title, a.kana from zhoz_mst a
where (a.title,a.kana) in (select title,kana from zhoz_mst group by title,kana having count(*) > 1)
and id not in (select min(id) from zhoz_mst group by title,kana having count(*)>1)
取出两字段完全相同:
select a.id, a.title, a.kana from zhoz_mst a
where (a.title,a.kana) in (select title,kana from zhoz_mst group by title,kana having count(*) > 1)
----------------------
1 aaa bbb
3 aaa bbb
4 aaa bbb
5 a b
8 a b
取最大ID号
select * from prn a
where a.flowid in(select max(flowid) from prn where tm>'2009-7-1' group by stcd )
取最大ID号语句优化
select * from prn a (select max(flowid) flowid from prn where tm>'2010-1-28'group by stcd ) b
where a.flowid=b.flowid
CREATE TABLE `zhoz_mst` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 66 ) NOT NULL ,
`kana` VARCHAR( 66 ) ,
`zz` VARCHAR( 66 ) NOT NULL
) ENGINE = MYISAM ;
插入测试数据:
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'aaa', 'bbb', 'ccc');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'aaa', 'bbb2', '2');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'aaa', 'bbb', '3');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'aaa', 'bbb', '4');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'a', 'b', '5');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'a', NULL, '6');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'a', NULL, '7');
INSERT INTO `zhoz0428`.`zhoz_mst` (`id` ,`title` ,`kana` ,`zz` )VALUES (NULL , 'a', 'b', '8');
1 aaa bbb ccc
2 aaa bbb2 2
3 aaa bbb 3
4 aaa bbb 4
5 a b 5
6 a NULL 6
7 a NULL 7
删除保存最小ID:
select a.id, a.title, a.kana from zhoz_mst a
where (a.title,a.kana) in (select title,kana from zhoz_mst group by title,kana having count(*) > 1)
and id not in (select min(id) from zhoz_mst group by title,kana having count(*)>1)
取出两字段完全相同:
select a.id, a.title, a.kana from zhoz_mst a
where (a.title,a.kana) in (select title,kana from zhoz_mst group by title,kana having count(*) > 1)
----------------------
1 aaa bbb
3 aaa bbb
4 aaa bbb
5 a b
8 a b
取最大ID号
select * from prn a
where a.flowid in(select max(flowid) from prn where tm>'2009-7-1' group by stcd )
取最大ID号语句优化
select * from prn a (select max(flowid) flowid from prn where tm>'2010-1-28'group by stcd ) b
where a.flowid=b.flowid
相关文章推荐
- [oracle]删除一张表中重复数据,保留其id字段最小的sql
- Mysql删除重复数据保留最小的id 的解决方法
- Sql 根据名称剔除重复数据、根据id返回最新的
- sql 2005 中如何自动生成不重复的,长度相同字符串作为一个数据表的id
- sql,key id不唯一,导致出现重复数据
- sql重复数据处理,有唯一ID,formid有重复,留一条
- sql 多个字段分组,删除重复记录,保留ID最小的一条
- mysql 创建唯一索引前 删除重复数据只保留ID最小一条。
- 主键id是自增的,插入数据还是提示 SQL 不能插入重复键
- SQL针对单列删除重复数据只保留一条id最大的数据
- 删除oracle 表中重复数据sql语句、保留rowid最小的一条记录
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- Mysql 删除重复数据只保留id最小的
- Oracle 删除重复数据只留一条 查询及删除重复记录的SQL语句 1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 wher
- 删除重复数据,保留一条ID最小的
- mysql 创建唯一索引前 删除重复数据只保留id最小一条。
- sql指定排序规则、筛选id最大或最小记录、查询插入数据
- 在进行一张表进行groupby后获取最大id和最小id数据的sql语句
- SQL删除重复数据只保留一条
- SQL查询某一字段重复的数据