SQLPLUS问题中的ORDER BY和UNION

时间:2018-10-28 18:52:44

标签: sql oracle union

我给出以下错误:当我尝试使用“ order by”选择id_prof并同时对不同表的列进行合并时,出现“ ORA-01785:ORDER BY项目必须为SELECT列表表达式的编号”

命令如下:

select substr(nume, 1, 1)||'.'||regexp_replace(prenume, '[aeiou]', null, 1, 0, 'i') as "Rododendron" 
from studenti 
union 
select ceil(sqrt(to_number(substr (id_prof, 2, 1))*2)) as "Fata de con" 
from profesori 
where grup_didactic = 'Lect' 
order by to_number(substr (id_prof, 2, 1)) desc;

这些表格在以下图片中:FirstPicture SecondPicture

我想最后两列。

第一个字母应包含“ nume”的第一个字母,并以“。”连接。和没有元音的“ prenume”(列名为“ Rododendron”)。

在第二个中,我想从id_prof的数字(称为“ Fata de con”的列)的双数中取一个圆角的平方根,作为在“ profesori”中可以找到的一切,其中grup_didactic ='lector ',并且一切都按id_prof后的顺序排序。

有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

Oracle说,您无法按SELECT列列表中未包含的列对结果进行排序;例如这个简单的Scott模式范例:

SQL> select ename from emp
  2  union
  3  select dname from dept
  4  order by substr(ename, 1, 3);
order by substr(ename, 1, 3)
         *
ERROR at line 4:
ORA-01785: ORDER BY item must be the number of a SELECT-list expression

我想说 sorting 是目前您遇到的最少问题。 UNION将不会返回两列;删除ORDER BY并亲自查看-如果您很幸运,则会看到一列。

这就是您现在要做的:

select col from studenti
union
select another_col from profesori

想要获得的时候

select col, another_col
from ...

FROM子句很棘手,因为您似乎要从两个不同的表中进行选择。您可以加入他们,以便查询看起来像第二个选择吗?如果没有,您总是可以做笛卡尔积,但这很可能是错误的结果。

如果您提供示例输入数据并说明如何从该输入中获取结果,这将有所帮助。