Почему добавление «AS» в оператор SQL «FROM» вызывает ошибку? - PullRequest
3 голосов
/ 28 февраля 2020

Follow SQL оператор работает хорошо, но при добавлении AS база данных выдает ошибку. Тем не менее, во многих данных случаях содержится AS в FROM. Так что не так с заявлением об ошибке?

Спасибо

-- works code

select distinct id 
from PROJECT b
where 0>= (
    select max(step) 
    from PROJECT
    where (status='C' and id =b.id)
    );

-- error code

select distinct id 
from PROJECT as b
where 0>= (
    select max(step) 
    from PROJECT
    where (status='C' and id =b.id)
    );

сообщение об ошибке: ORA-00933: SQL command not properly ended

-- testing data

create table project (
    id varchar(22) not null,
    step int not null,
    status char(1) not null,
    primary key (id, step)
);

insert into project values ('P100', 0,'C');
insert into project values ('P100', 1,'W');
insert into project values ('P100', 2,'W');
insert into project values ('P201', 0,'C');
insert into project values ('P201', 1,'C');
insert into project values ('P333', 0,'W');
insert into project values ('P333', 1,'W');
insert into project values ('P333', 2,'W');
insert into project values ('P333', 3,'W');

Примечание: мой код работает на https://livesql.oracle.com/ (то есть с использованием Oracle База данных 19 c)

1 Ответ

3 голосов
/ 28 февраля 2020

as недопустимо для псевдонимов таблиц в Oracle (хотя это разрешено в любой (или почти в каждой) другой базе данных.

Тем не менее, есть два альтернативных способа написания вашего запроса, которые может быть более эффективным:

select distinct p.id 
from PROJECT p
where exists (select 1
              from PROJECT p2
              where p2.id = p.id and p2.status = 'C' and p2.step > 0
             );

Или:

select distinct p.id
from project p
where p.status = 'C' and p.step > 0
...