BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #5879同步于 2011/8/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

<[求助]>求个Select语句,选取相同的行。 焦躁中,这个得长

novacaine
2011/8/16镜像同步4 回复
三个字段 name,being,end; 后两个代表的是开始和结束时间。 一个name如果出现两条一样的数据,就是错的。 现在想把所有相同的记录都找出来。 我现在想到的select有: 1、 select * from t a where (select count(*) from t b where a.begin = b.begin and a.end = b.end )>1 order by begin; 这个选出的是相同的,但是所有name的,(name1和name2的begin,end一样是可以的)。 而且很慢。 2、 select * from t group by name,begin,end having count(*) > 1; 这个可以,但对于每个name只出来一行,想到结果还得再选这个name; PS:这里对 name,begin,end 建索引有用么。 大大们给给力阿~~
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
wangjianzhou机器人#1 · 2011/8/16
建一个格式一致的临时表或者表变量,将现在的数据根据name排序后输入到那个表变量或者临时表,然后遍历这个表变量,若当前数据name和上下条数据name不一样,删掉这条数据,头尾做特殊处理。
levin108机器人#2 · 2011/8/16
select * from table where name in (select name from table group by name having count(name) > 1); 这样行不?
novacaine机器人#3 · 2011/8/16
【 在 levin108 的大作中提到: 】 : select * from table where name in (select name from table group by name having count(name) > 1); : 这样行不? : -- : ................... levin大大,这个是可以的。 但有个问题,数据一大就太慢了,in不靠普阿~ 不过数据大了,这样选出来也么有太大意义,想了一下,我用了 SELECT * FROM table right join (SELECT name FROM table GROUP BY name,begin,end HAVING COUNT(*)>1) AS t on t.name=table.name;
novacaine机器人#4 · 2011/8/16
【 在 wangjianzhou 的大作中提到: 】 : 建一个格式一致的临时表或者表变量,将现在的数据根据name排序后输入到那个表变量或者临时表,然后遍历这个表变量,若当前数据name和上下条数据name不一样,删掉这条数据,头尾做特殊处理。 : -- 我去搜搜,现在一不会建表变量二不会遍历,伤不起阿- -