1
  SELECT * FROM testtable a 
  WHERE EXISTS (SELECT COUNT(*) FROM testtable b
                WHERE b.B=a.B AND b.C=a.C
                HAVING COUNT(*)>1 )

解决方案 »

  1.   

    Sorry,打漏了:  SELECT * FROM testtable a 
      WHERE EXISTS (SELECT COUNT(B.*) FROM testtable b
                    WHERE b.B=a.B AND b.C=a.C
                    HAVING COUNT(B.*)>1 )
      

  2.   

    能不能解释一下?
    SELECT * FROM testtable a 
      WHERE EXISTS (SELECT COUNT(B.*) FROM testtable b
                    WHERE b.B=a.B AND b.C=a.C
                    HAVING COUNT(B.*)>1 )
    是从testtable表里面读去所有数据,条件是什么呢?where exists这个是什么?还有后面括号内的怎么解释呢?谢谢告诉我一下好不好啊?
      

  3.   

    2.(假设你的A列是唯一的)  DELETE testtable 
      WHERE A IN (SELECT MAX(b.A) FROM testtable b
                  WHERE EXISTS (SELECT COUNT(c.*) FROM testtable c
                                WHERE c.B=b.B AND c.C=b.C
                                HAVING COUNT(c.*)>1 )
                  GROUP BY b.B,b.C )
      

  4.   

    SELECT COUNT(B.*) FROM testtable b
    WHERE b.B=a.B AND b.C=a.C
    HAVING COUNT(B.*)>1这一段是:从表中得到与该行B列与C列都相等的记录的条数(如果数量大于1的,那就说明这记录是属于“B,C 列存在重复的收有行”)
      

  5.   

    2.
    delete from testtable where A  not in (select min(A) from testtable b group by B,C having count(*) >0) and A in (select A from testtable c where exists(select 1 from testtable d where d.B=c.B and d.C=c.C group by d.B,d.C having count(*)>1));前提是A是主键,当然如果是别的字段,也可如此。
      

  6.   

    怎样的不行?我的自己的机上测试通过吖~~或者改成这样试试:1.
      SELECT * FROM testtable a 
      WHERE EXISTS (SELECT COUNT(b.B) FROM testtable b
                    WHERE b.B=a.B AND b.C=a.C
                    HAVING COUNT(b.B)>1 )2.  
      DELETE testtable 
      WHERE A IN (SELECT MAX(b.A) FROM testtable b
                  WHERE EXISTS (SELECT COUNT(c.B) FROM testtable c
                                WHERE c.B=b.B AND c.C=b.C
                                HAVING COUNT(c.B)>1 )
                  GROUP BY b.B,b.C )
      

  7.   

    不是不行啊!是希望你能解释的清楚点我看不懂你写的sql了别见笑啊!
      

  8.   

    能实现的方法并不只一种啊。
    要解释比较难吖(我又不是教书的:)
    讲一下思路吧~~
    1.逐行地扫描表,从表中查找B、C列数据跟当前行B、C列数据相等的记录的条数。如果这数目是大于1(即B、C列重复了),那么当前行就符合要求,把它Select出来。2.的1的基础上把数据按B、C归类并选出A为最大的记录,再把这记录从表中删除。
      

  9.   

    iyiduhsoad(一第数倒) 说得有理,我疏忽了:)