这句sql语句可不可以优化?
表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?




