首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • SQL 的别名中,遇到的问题!!!!!!!!!!!!!!!! [已结贴,结贴人:duzhonghua]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • duzhonghua
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-20 20:30:19 楼主
    oracle 中
    SQL code
    SELECT b.EMPLOYEE_CODE as me FROM VB_TEST_EMPLOYEE b order by me


    这样是可行的,为什么,下面不行啊,怎么解决


    SQL code
    SELECT CASE WHEN b.EMPLOYEE_CODE ='12' THEN b.EMPLOYEE_NAME ELSE b.EMPLOYEE_NAME END AS NAME FROM VB_TEST_EMPLOYEE b where NAME LIKE 'd%'


    60  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • oracledbalgtu
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 21:08:431楼 得分:15
    SQL code
    SELECT b.EMPLOYEE_CODE as me FROM VB_TEST_EMPLOYEE b order by me; 也可以改成 SELECT b.EMPLOYEE_CODE as me FROM VB_TEST_EMPLOYEE b order by 1; 为什么哪?原因是oracle从数据文件中取出数据后,排序操作是不需必须使用原始列名的。 而where条件中的列名必须是from的对象中的列名,不能是alias的名子,因为取数时是要靠实际列名的数据来筛选的。 如果想用你给的alias列名,可以再嵌套一次: select * from(SELECT CASE WHEN B.EMPLOYEE_CODE = '12' THEN B.EMPLOYEE_NAME ELSE B.EMPLOYEE_NAME END AS NAME FROM VB_TEST_EMPLOYEE B) WHERE NAME LIKE 'd%';
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cosio
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 22:04:552楼 得分:10
    我怎么测试都可以能过?为什么?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cosio
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-20 22:08:243楼 得分:5
    SQL code
    select * from tt t01 t02 a 1 a 2 b 1 b 3 ------------------------------------------------------------ select case when t01='a' then t02 else t02 end as new from tt where t01 LIKE 'a%' order by 1 result: new 1 2

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbcxbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 00:21:004楼 得分:10
    第一个sql是可以的.因为order by 的时候是可以用列别名的
    第二个sql是不可以的.因为where后面需要真实列名.不可以用
    别名.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hongqi162
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 14

    发表于:2008-08-21 08:36:235楼 得分:10
    order by 是对查询结果进行排序,你的第二个查询属于对表的name字段进行查询
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ruihuahan
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

    发表于:2008-08-21 11:38:166楼 得分:10
    别名只能用在 order by 部分,where 部分不能使用列别名。

    从 sql 语句处理的逻辑顺序来讲,别名的生成是在做 where 过滤之后,也就是说,系统处理 where 子句的时候,别名还不存在。
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved