Как выбрать однозначный числовой литерал из подвыбора - PullRequest
1 голос
/ 12 июля 2011

Мне интересно, существует ли общий синтаксис SQL, позволяющий выбирать неотображаемые числовые литералы из подвыборов:

-- Seems to work in MySQL / Oracle
select table_alias."1"
from (
   select 1 from dual
) table_alias

Я знаю, что мог бы создать псевдоним полей в подвыборке:

-- Works everywhere
select table_alias.column_alias
from (
   select 1 column_alias from dual
) table_alias

Но что, если я не контролирую подселект? Кроме того, некоторые РСУБД позволяют предоставлять псевдонимы таблиц И столбцов при псевдонимах таблиц:

-- Seems to work in Postgres / SQL Server
select table_alias.column_alias
from (
  select 1 from dual
) table_alias (column_alias)

Но некоторые РСУБД (например, MySQL) не могут этого сделать. Есть ли другой способ?

  • Примечание. Речь идет не о какой-либо конкретной СУБД, а о SQL в целом
  • Примечание: я бы хотел опустить звездочку, т. Е. Нет select * ...

С этим вопросом связан следующий вопрос:

Существует ли универсальный обходной путь для выражения списка производных столбцов в Oracle (и MySQL)?

Ответы [ 2 ]

1 голос
/ 12 июля 2011

В соответствии со стандартом ANSI-92 это зависит от реализации.Из раздела 7.9, 9.c:

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

Другими словами, все будет зависеть от СУБД, которую вы используете в то время.

Кстати, вы можете проверить стандартов ANSI-92 , если вы ищете повеселиться, читая.

1 голос
/ 12 июля 2011

В Oracle вы можете сделать

select aa."2" from ( select 2 from dual ) aa
...