科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道请教一个关于sql语句的伪列简单问题。

请教一个关于sql语句的伪列简单问题。

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

请教一个关于sql语句的伪列简单问题。

作者:csdn 来源:csdn 2009年12月21日

关键字: ORACLE 问答

  • 评论
  • 分享微博
  • 分享邮件

请教一个关于sql语句的伪列简单问题。

有如下sql:我把TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd') || FL.FLWNO  定义成伪列DT_FLWORINTERPS  ,为什么在where条件中不能用呢,sql提示无法识别的字符。
SQL code
SELECT FL.*,
  TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd') || FL.FLWNO as DT_FLWORINTERPS  --这里定义的伪列为什么在where语句中不能用呢???????????
  FROM AIDSZH_SGRA_ADULT_FLW FL,
       (SELECT CARD_ID,
               MAX(TO_CHAR(F.DT_FLWORINTERP, 'yyyy-mm-dd') || F.FLWNO) DT_FLWORINTERP
          FROM AIDSZH_SGRA_ADULT_FLW F
         WHERE F.DT_FLWORINTERP <= TO_DATE('2009-11-30', 'yyyy-mm-dd')
           AND F.ZONECODE LIKE '371081%'
         GROUP BY F.CARD_ID) FMAX
 WHERE fl.DT_FLWORINTERPS  = FMAX.DT_FLWORINTERP
   AND FL.CARD_ID = FMAX.CARD_ID

 

不用伪列却很正常:
SQL code
SELECT FL.*
  FROM AIDSZH_SGRA_ADULT_FLW FL,
       (SELECT CARD_ID,
               MAX(TO_CHAR(F.DT_FLWORINTERP, 'yyyy-mm-dd') || F.FLWNO) DT_FLWORINTERP
          FROM AIDSZH_SGRA_ADULT_FLW F
         WHERE F.DT_FLWORINTERP <= TO_DATE('2009-11-30', 'yyyy-mm-dd')
           AND F.ZONECODE LIKE '371081%'
         GROUP BY F.CARD_ID) FMAX
 WHERE ((TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd')) || FL.FLWNO) = FMAX.DT_FLWORINTERP
   AND FL.CARD_ID = FMAX.CARD_ID

 

TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd') || FL.FLWNO as DT_FLWORINTERPS

DT_FLWORINTERPS是列的别名,where子句中是不允许用列的别名的。

 

一定要用别名,可以先查fl,把它作为一个子查询。
select a.* from
(select to_char(...) as aaaa,fl.* from fl) a,
(select ...) b
where a. aaaa=b.aaaa
 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章