Почему в Oracle, когда мы выбираем значения из псевдонима, мы не можем указать столбец как псевдонимы? - PullRequest
1 голос
/ 13 мая 2011

Например Мой запрос:

select * 
from 
    (SELECT distinct b.lname||' '||b.fname as "Manager",b.EMPID as "Mgrid" 
     from EMPLOYEE1) a, 
    (select lname,fname,empid from EMPLOYEE1) b 
where b.EMPID=a.MGRID) 

загружается

Manager           Mgrid    
----------------  -------- 
Farooque Umer     104      
Sontireddy Kiran  107      
Chopra Bhupendra  103  

но я не могу написать:

select Manager, Mgrid 
from 
    (select distinct b.lname||' '||b.fname as "Manager",b.EMPID as "Mgrid" 
    from EMPLOYEE1) a, 
    (select lname,fname,empid 
    from EMPLOYEE1) b 
where b.EMPID=a.MGRID)

Ошибка:

[Ошибка] Строки сценария: 1-1 -------------------------- ORA-00904: «MGRID»: неверный идентификатор

Ответы [ 3 ]

3 голосов
/ 13 мая 2011

Потому что, как только вы начинаете заключать имена в двойные кавычки, такие как «Mgrid», они становятся чувствительными к регистру.Так что не надо.Сделайте это:

select Manager, Mgrid 
from 
    (select distinct b.lname||' '||b.fname as Manager,b.EMPID as Mgrid 
    from EMPLOYEE1) a, 
    (select lname,fname,empid 
    from EMPLOYEE1) b 
where b.EMPID=a.MGRID)

или если вам действительно нравятся регистрозависимые имена, вы должны сделать это:

select "Manager", "Mgrid" 
from 
    (select distinct b.lname||' '||b.fname as "Manager",b.EMPID as "Mgrid" 
    from EMPLOYEE1) a, 
    (select lname,fname,empid 
    from EMPLOYEE1) b 
where b.EMPID=a."Mgrid")
1 голос
/ 13 мая 2011

Вы должны применять косметическое именование полей только при выборе верхнего уровня - все остальные идентификаторы должны быть сохранены как действительные идентификаторы Oracle.

select manager as "Manager", mgrid as "Mgrid" 
from 
    (select distinct b.lname||' '||b.fname as manager, b.EMPID as mgrid
    from EMPLOYEE1) a, 
    (select lname,fname,empid 
    from EMPLOYEE1) b 
where b.EMPID=a.MGRID)
0 голосов
/ 13 мая 2011

Кроме кавычек, я думаю, что ваш пост содержит еще одну скобку, чем необходимо:

select Manager, Mgrid 
from 
    (select distinct b.lname||' '||b.fname as Manager,b.EMPID as Mgrid 
    from EMPLOYEE1 a, 
    (select lname,fname,empid 
    from EMPLOYEE1) b 
    where b.empid =a.Mgrid)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...