你能为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
也就是说,表别名不是列别名 – 您仍然需要引用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
您需要独特的原因是因为笛卡尔积.