CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

超级复杂查询问题(100分)

楼主ericzou(帝国主义)2002-04-02 17:57:35 在 MS-SQL Server / 基础类 提问

现有表如下  
      字段   名         类型  
        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

相关问题

  • 超级复杂的问题,一个复杂的查询..........各位大哥,救救兄弟啊.
  • 超级复杂的查询条件,如何优化性能..........求求兄弟们了,高手们了!
  • ==============SQL 复杂查询问题===============
  • 复杂的SQL查询!急!!!!!!!!!!!!!!!!!
  • 复杂的SQL查询!急!!!!!!!!!!!!!!!!!
  • 复杂的唯一查询
  • 复杂的联合查询
  • 复杂关联查询??
  • 复杂查询求助
  • ======超级查询(存储过程)==================

关键词

  • 字段
  • 语句
  • 组合
  • 结构
  • bb
  • aa
  • table1asgroup
  • distinct
  • aaa
  • 复杂

得分解答快速导航

  • 帖主:ericzou
  • LiaoCheng
  • Haiwer
  • weinfo
  • w_dong_w
  • jamex
  • dut
  • supsuccess
  • 8992026
  • 8992026

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo