一个表tabletest里面有大量数据,每条数据有主键ID,字段A,字段B。请按照如下要求处理数据。先 "select distinct 字段A from tabletest",得出数据集DATA,对DATA进行循环检测,"foreach数据集data里的每条记录",如果 Select count( distinct 字段 B)from tabletest where 字段A=DATA[i] ,如果得出的结果是1,就将tabletest里面“字段A=DATA[i]"的记录都删除。直到循环完数据集DATA为止,最后tabletest剩下的数据就是如果字段A一样的数据,B至少有两个或两个以上的值,请高手帮忙用sql语句实现。谢谢啊谢谢
我目前是用程序写的,效率太低,想用sql语句直接实现,不过水平太臭,特来请教,谢谢

解决方案 »

  1.   


    select * from tabletest a
    inner join
    (
       select A,B from tabletest group by A,B having count(*)>1
    )b
       on a.A=b.A and a.B=b.B
      

  2.   

    entry_id g_name1    A              B
    1         电视机 电视机29寸 800900
    2         电视机 电视机29寸 800900
    3         电视机 电视机29寸 800901
    4         电冰箱 电冰箱3门 900910
    5         电冰箱 电冰箱3门 900910
    6         电冰箱 电冰箱3门 900910
    7         电冰箱 电冰箱3门 900910
    8         电冰箱 电冰箱3门 900910
    9         电视机 电视机29寸 800900
    10         电视机 电视机29寸 800910
    11         电视机 电视机29寸 800901
    12         收音机 收音机FM         100909
    13         收音机 收音机FM         100909
    14         收音机 收音机FM  100909谢谢楼上的解答,可是好像还不能得出的结果。
    例如我的表存储了上面的数据,那么根据我的要求,经过筛选的数据应该如下。
    entry_id     G_NAME1  A           B
    1 电视机 电视机29寸 800900
    2 电视机 电视机29寸 800900
    9 电视机 电视机29寸 800900
    10 电视机 电视机29寸 800910
    3 电视机 电视机29寸 800901
    11 电视机 电视机29寸 800901因为数据中A=电视机的记录中,B为800900,800910,800901三种。其余的收音机FM,电冰箱3门的B只有一种,顾不符合,应该舍弃
      

  3.   


    select
    s.A,s.B,min(ID) as ID
    from
    (
    select A,B,ID from tabletest a
    inner join
    (
       select A,B from tabletest group by A,B having count(*)>1
    )b
       on a.A=b.A and a.B=b.B
    )s
    group by s.A,s.B
      

  4.   

    感谢楼上的解答,不过家里的机器没有sql,明天回去试试。感谢啊