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

这句sql语句可不可以优化?

楼主fabiowen2()2005-10-20 08:39:38 在 MS-SQL Server / 疑难问题 提问

表peizhi:  
  配置id                       类别                           id  
      1                           计算机                           1  
      2                           计算机                           2  
      3                             车辆                             1  
      4                             车辆                             2  
  表jisuanji  
    id                             名称                             类别  
      1                             P4,40G                     计算机  
      2                             P3,20G                     计算机  
  表cheliang  
    id                             名称                             类别  
      1                             奔驰                             车辆  
      2                             宝马                             车辆  
   
  我想达到的目的是输入任何一个配置号(如:1,2,3,4)得到它的名称(如:P4,40G),比如输入配置号:3,通过表peizhi得到类别:车辆和id:1,此时就和cheliang表关联,通过id得到最终名称:奔驰  
  select   peizhiid   配置号,jisuanji.name   名称   from   peizhi,jisuanji   where   peizhi.leibie=jisuanji.leibie   and   peizhi.id=jisuanji.id   and   peizhiid=3   union  
  select   peizhiid   配置号,cheliang.name   名称   from   peizhi,cheliang   where   peizhi.leibie=cheliang.leibie   and   peizhi.id=cheliang.id   and   peizhiid=3  
  此语句已达到目的,但感觉太复杂,求助有没有好方法?因为最终我的分类表(诸如:jisuanji,cheliang。。。。。)不止两个有多个,谢谢! 问题点数:30、回复次数:4Top

1 楼churchatp1(别看资料,看聊效!)回复于 2005-10-20 08:49:50 得分 10

select   peizhiid   配置号,(case   when   leibie='计算机'   then   b.name   when   leibie='车辆'   then   c.name   else   '   '   end     )as   名称     from   peizhi   a   left   outer   join   jisuanji   b   on   a.id=b.id   left   outern   join   cheliang   c   on   a.id=c.idTop

2 楼wgsasd311(自强不息)回复于 2005-10-20 09:09:36 得分 10

表的设计极不合理,严重违返数据库的设计原则(按三范式要求)  
  所以你的小小查询要求实现起来,代码变得很复要,效果也不好。  
  重新规范表结构。Top

3 楼MorningTea(一勺抹茶)回复于 2005-10-20 09:11:13 得分 10

你的语句虽然说有点复杂,可churchatp1给出的也是很复杂,你的起码只是简单查询union起来,而   churchatp1的是大表套小表,那么子查询,随着表的增加,他的写法,你不一个一个字查询拆开分析,要得一眼看清逻辑是不大可能的.  
   
  如果那么多分类,为什么不合并表jisuanji和表cheliang呢?  
    总类                         id                             名称                             类别  
    jisuanji                     1                             P4,40G                     计算机  
  jisuanji                       2                             P3,20G                     计算机  
  cheliang                     1                             奔驰                             车辆  
  cheliang                       2                             宝马                             车辆  
   
  这样不是既可分开查询jisuanji,cheliang,也可以查询所有分类吗?  
  既然分类表的明细差不多一样,合在一起即可,再加个子段就可以区分每一种分类Top

4 楼fabiowen2()回复于 2005-10-20 09:28:26 得分 0

二楼三楼仁兄说得很有道理,之所以不合并,是因为,名称列是由很多小列组成,而每个表的组成不一样。jisuanji名称由列:CPU,硬盘,内存等组成;cheliang名称由:车牌号,车型,发动机号,大梁号等组成,如车辆表要单独和其它表关联,所以要分开设计Top

相关问题

  • SYBASE中SQL语句可不可以实现如下功能?
  • 请教SQL语句中的JOIN可不可以嵌套?
  • 我的SQL语句太长了,可不可以分行?怎样分?
  • 可不可以在sql语句中加入if等判断语句?请举例谢谢
  • 求教一个高难度sql语句(不知道可不可以用sql实现)!
  • 用command添加参数更新sql数据库时,用的sql语句可不可以包含子查询?急!!
  • access中通过connection执行sql语句时可不可以把两句并一块,使用什么分隔?
  • 高手,大虾,这个SQL语句如何写呢,not in 可不可以对多个字段进行处理呢?????
  • 请问如果要实现这样的目的该怎么办?可不可以用两个SQL语句?
  • 请问Excel或者DBF可不可以用OleDb连接用Create Table创建表然后用SQL语句Update?

关键词

  • 语句
  • 计算机
  • 查询
  • cheliang
  • jisuanji
  • peizhi
  • leibie
  • peizhiid
  • 表
  • 车辆

得分解答快速导航

  • 帖主:fabiowen2
  • churchatp1
  • wgsasd311
  • MorningTea

相关链接

  • SQL Server类图书

广告也精彩

反馈

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