sql – oracle:你能为from子句分配一个别名吗?

前端之家收集整理的这篇文章主要介绍了sql – oracle:你能为from子句分配一个别名吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
你能为from子句分配一个别名吗?喜欢:
select a - b "Markup" from retail a,cost b;

编辑:抱歉,我输入的速度有点过快,并试图将问题简化到没有任何意义的地步

我真正想要做的是使用别名来比较同一个表中两个发布日期之间的月份.这是我发现的作品:

select distinct to_char(months_between((select distinct pubdate
                                        from books3 
                                        where pubid = 2),(select distinct pubdate 
                                        from books3 
                                        where pubid = 4)),'99.99') "Answer"
                              from books3

我希望它看起来像这样:

select distinct months_between(a,b)
from (select distinct pubdate 
       from books3 
       where pubid = 2 as a),(select distinct pubdate 
      from books3 
      where pubid = 4 as b)

但这不起作用

解决方法

是的,Oracle支持表别名.它支持SELECT列表中的AS,但不支持FROM列表中的AS:
SELECT a.col - b.col AS markup
  FROM RETAIL a,COST b
 WHERE b.id = a.id

大多数数据库支持省略AS关键字.

也就是说,表别名不是列别名 – 您仍然需要引用SELECT子句中相应表中的特定列,就像您在我的示例更新中看到的那样.我还添加了WHERE标准,因此查询不会返回笛卡尔积.

派生表/内联视图(AKA子查询,有时需要表别名,但我发现术语非常模糊):

SELECT x.col
  FROM (SELECT t.col,MAX(t.date)
          FROM TABLE t
      GROUP BY t.col) x

这是您的查询

您的问题是您将表别名放在派生表中,当它需要在括号/括号之外时:

SELECT DISTINCT TO_CHAR(MONTHS_BETWEEN(x.pubdate,y.pubdate),'99.99') AS "Answer"
 FROM (SELECT DISTINCT a.pubdate FROM BOOKS3 a WHERE a.pubid = 2) x,(SELECT DISTINCT b.pubdate FROM BOOKS3 b WHERE b.pubid = 4) y

您需要独特的原因是因为笛卡尔积.

原文链接:https://www.f2er.com/mssql/77547.html

猜你在找的MsSQL相关文章