首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • SQL 的别名中,遇到的问题!!!!!!!!!!!!!!!! [已结贴,结贴人:duzhonghua]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • duzhonghua
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-08-20 20:30:22 楼主
    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:01:471楼 得分:25
    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%';
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbcxbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 00:21:302楼 得分:12
    第一个sql是可以的.因为order by 的时候是可以用列别名的
    第二个sql是不可以的.因为where后面需要真实列名.不可以用
    别名.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hongqi162
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 14

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

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

    从 sql 语句处理的逻辑顺序来讲,别名的生成是在做 where 过滤之后,也就是说,系统处理 where 子句的时候,别名还不存在。

    如果要在 where 子句中使用别名,可以按楼上说的,再嵌套一次。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • duzhonghua
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-08-21 12:51:195楼 得分:0
    谢谢,大家的关注,给分
    修改 删除 举报 引用 回复

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