一个表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语句直接实现,不过水平太臭,特来请教,谢谢
我目前是用程序写的,效率太低,想用sql语句直接实现,不过水平太臭,特来请教,谢谢
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
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只有一种,顾不符合,应该舍弃
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