超级复杂查询问题(100分)
现有表如下
字段 名 类型
aa varchar 可重复
bb varchar 可重复
值为 :
aa bb
test1 1
test1 2
test1 3
test2 1
test2 2
test3 1
test3 2
test4 3
现要找出满足条件 bb字段值=1 and 2 and 3 的记录的aa字段的值(不能重复),只有test1 ,test3,
条件可以任意 如: bb=1 and bb=2 or bb=3 或着 bb=1 or (b=2 and bb=3) 等等
如何解决!!!
问题点数:100、回复次数:15Top
1 楼LiaoCheng(光辉岁月>>www.vod-online.net)回复于 2002-04-02 18:20:29 得分 10
数据库设计得不行,才会有这么多的麻烦事!!Top
2 楼Haiwer(海阔天空)回复于 2002-04-02 19:35:15 得分 20
select distinct aa
from tablename t1
where bb='1'
and exists (
select * from tablename t2
where t2.aa=t1.aa
and t2.bb='2'
)
and exists (
select * from tablename t3
where t3.aa=t1.aa
and t3.bb='3'
)
这不是什么难事,问题是你的例子错误,结果应该只有test1 。
Top
3 楼weinfo(笑三少)回复于 2002-04-02 19:50:03 得分 10
select distinct aa
from ...
where bb= '1'Top
4 楼yinzhen(銀圳)回复于 2002-04-02 22:06:50 得分 0
同意haiwer(海阔天空--回复语句只对MSSQL有效)Top
5 楼ericzou(帝国主义)回复于 2002-04-05 12:36:41 得分 0
bb同时等于1,2,3的有test1,test3,条件可以任意组合,难道没有人会吗?我觉的表结构有问题,但不知如何建?Top
6 楼w_dong_w(DongDong)回复于 2002-04-05 13:16:47 得分 10
Haiwer(海阔天空--回复语句只对MSSQL有效)的语句可以。
这样会不会清楚一点:
select distinct aa from tb as bbb
where (exists (select * from tb as aaa where aaa.bb='1' and aaa.aa=bbb.aa)
and
exists (select * from tb as aaa where aaa.bb='2' and aaa.aa=bbb.aa)
and
exists (select * from tb as aaa where aaa.bb='3' and aaa.aa=bbb.aa)
)
你说的条件可以任意是什么意思?Top
7 楼jamex(1 + 1 = 爱)回复于 2002-04-05 13:41:47 得分 10
select distinct aa
from table1 as
group by aa
having bb='1' and bb='2' and bb='3' and (aa <>'test1' and aa <>'test3')
union all
select distinct aa
from table1 as
group by aa
having bb='1' or bb='2' or bb='3' and (aa in('test1','test3'))
Top
8 楼jamex(1 + 1 = 爱)回复于 2002-04-05 13:44:56 得分 0
上面一个有问题,这个应该是对的,大家看看!
select distinct aa
from table1 as
group by aa
having bb='1' and bb='2' and bb='3'
Where aa <>'test1' and aa <>'test3'
union all
select distinct aa
from table1 as
group by aa
having bb='1' or bb='2' or bb='3'
Where aa in('test1','test3')
Top
9 楼dut(到哪里都是菜鸟)回复于 2002-04-05 13:48:36 得分 10
bb同时等于1,2,3的有test1,test3,条件可以任意组合,难道没有人会吗?我觉的表结构有问题,但不知如何建?
select aa
from (
select distinct aa,bb from table1
) as c
where bb='1' or bb='2' or bb='3'
group by aa
having count(*>1)
Top
10 楼jamex(1 + 1 = 爱)回复于 2002-04-05 13:50:20 得分 0
对不起,我没看清题目,上面不对!Top
11 楼supsuccess(火气不小)回复于 2002-04-05 13:50:27 得分 10
复杂吗?
select aa from tablename group by aa
having sum((case bb when 1 then 1 when 2 then 1 when 3 then 1 else 0 end))=3Top
12 楼jamex(1 + 1 = 爱)回复于 2002-04-05 13:52:53 得分 0
我认为:
表结构修改如下较好:
字段 名 类型
aa varchar 可重复
bb1 varchar '0' 或 '1'
bb2 varchar '0' 或 '1'
bb3 varchar '0' 或 '1'
Top
13 楼8992026(8992026)回复于 2002-04-05 14:09:29 得分 0
select aa from tablename group by aa
having sum((case bb when 1 then 1 when 2 then 1 when 3 then 1 else 0 end))>1
Top
14 楼8992026(8992026)回复于 2002-04-05 14:11:23 得分 10
如果原表有重复,dut(大工) 的正确,但有个笔误:
select aa
from (
select distinct aa,bb from table1
) as c
where bb='1' or bb='2' or bb='3'
group by aa
having count(*) >1Top
15 楼8992026(8992026)回复于 2002-04-05 14:17:40 得分 10
这个问题并不复杂,但是贴主原说:
“bb字段值=1 and 2 and 3 的记录的aa字段的值(不能重复),”
后说:
“bb同时等于1,2,3的有test1,test3,条件可以任意组合”
还是不对,怎么会有test1,test3呢,怎么叫“条件可以任意组合”
看看你自己的数据,有test1,test3又怎么没有test2呢???
浪费感情!!上面两个回复都是没有用的,根本不知道要什么!!
Top
16 楼IronPromises(铁诺)回复于 2002-08-12 17:22:00 得分 0
结贴Top




