2012-01-26 2 views
4

В SQL ServerУплотненных Выберите в ЕКЕ

вы можете написать вложенную SQL так:

SELECT T.con 
FROM (SELECT count(*) as "con" FROM EMP) AS T 

В таким образом, я могу получить временную таблицу T, который может быть вложен в другой запрос.

Но я не могу сделать то же самое в Oracle SQL

Это дает мне ORA-01747:invalid column

SELECT * 
FROM (SELECT count(*) as "con" FROM EMP) T 

SELECT * работает, но это не то, что я хочу. Кто-нибудь знает, как это сделать?

ответ

6

Запрос, который вы опубликовали, отлично подходит для меня, я конкретно указываю псевдоним или задаю ли я *. Можете ли вы опубликовать точный запрос, который вы используете, когда получаете исключение?

SQL> SELECT * 
    2 FROM (SELECT count(*) as "con" FROM EMP) T; 

     con 
---------- 
     14 

SQL> ed 
Wrote file afiedt.buf 

    1 SELECT "con" 
    2* FROM (SELECT count(*) as "con" FROM EMP) T 
SQL>/

     con 
---------- 
     14 

Мое предположение было бы, что вы пытаетесь выбрать con без двойных кавычек. Если вы используете идентификатор с двойными кавычками в Oracle, вы сообщаете Oracle, что хотите, чтобы идентификатор был чувствительным к регистру, который по очереди означает, что вам всегда нужно ссылаться на него с учетом регистра, и вам нужно каждый раз включайте имя столбца в двойные кавычки. Я бы настоятельно советовал не использовать идентификаторы, чувствительные к регистру, в Oracle.

+0

Двойные кавычки - это ответ! Возможно, MQ-SQL не чувствителен к регистру, поэтому для такой операции двойные кавычки не нужны. Спасибо, что помогает много – MildC

+0

@ Justin Cave Почему нам нужно 'T' в конце? – Geek

+0

@Geek - псевдоним строго необходим в Oracle (требуется в других базах данных). Как правило, хорошей идеей является псевдоним всего, что вы «SELECT», потому что это облегчает в будущем, когда вы хотите присоединиться к другой таблице, и когда вы хотите удостовериться, что другой разработчик может видеть, в какую таблицу входит конкретный столбец из. –

0

Ну, ORA-01747 встречается обычно с зарезервированными словами, но насколько мне известно, con не является зарезервированным словом. В любом случае, попробуйте:

select t.* 
    from (select count(*) count_emp from emp) t 
+0

Да, т. * Работает, спасибо – MildC

Смежные вопросы