Leetcode Oracle - ORA-00923: ключевое слово FROM не найдено там, где ожидается - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь решить эту проблему, используя Oracle SQL, но продолжаю получать эту ошибку -

ORA-00923: FROM keyword not found where expected

ссылка на проблему - https://leetcode.com/problems/department-top-three-salaries/submissions/

мое решение до сих пор - просто для запроса данных -

with temp as
(
    select d.Name as Department,
    e.Name as Employee,
    e.Salary as Salary
    from employee e
    join department d
    on e.DepartmentId = d.Id
)
select *
, rank() over (partition by department order by salary desc) as rr
from temp 

, но если я просто запустите это, то оно будет работать нормально -

with temp as
(
    select d.Name as Department,
    e.Name as Employee,
    e.Salary as Salary
    from employee e
    join department d
    on e.DepartmentId = d.Id
)
select *
from temp 

И если Я запускаю это, тогда он работает нормально -

select department, employee, salary
from
(
select A.* , dense_rank() over (partition by department order by salary desc) as rr
from
(
select d.Name as Department,
e.Name as Employee,
e.Salary as Salary
from employee e
join department d
on e.DepartmentId = d.Id
) A
) B
where rr <= 3

означает ли это, что я не могу использовать каскадные операторы with в oracle?

Например, я не могу написать -

with temp as 
(
select col1, col2 from table
)

, temp1 as
(
select *, "hello" as col3
from temp
)

select *
from temp1

в Oracle?

1 Ответ

1 голос
/ 29 апреля 2020

Если вам нужно выбрать только все столбцы, тогда * без псевдонима подойдет. Но если вам нужно указать псевдоним таблицы, где бы вы ни хотели выделить все столбцы таблицы, используйте *, а также другое выражение в предложении SELECT.

with TEMP AS 
( SELECT
    COL1,
    COL2
FROM table )
, TEMP1 AS 
(SELECT
    T.*, -- alias here
    "hello"   AS COL3
FROM TEMP T
)
select * FROM TEMP1;

with temp as
(
    select d.Name as Department,
    e.Name as Employee,
    e.Salary as Salary
    from employee e
    join department d
    on e.DepartmentId = d.Id
)
select T.* -- alias here
, rank() over (partition by department order by salary desc) as rr
from temp T;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...