2011-07-12 21 views
1

一般的な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) 

しかし、いくつかのRDBMS(たとえばMySQLは)それを行うことはできません。また、一部のRDBMSは、テーブルをエイリアシングする場合、テーブルと列の別名の両方を提供することができます。別の方法がありますか?

  • 注:これは、任意の特定のRDBMSに関するものではありませんが、ちょうど
  • 一般的にはSQL注:私はアスタリスクを省略したいと思いますが、何のselect * ...

関連、すなわちん質問はここに、このいずれかになります。

Is there a generic workaround to express a derived column list in Oracle (and MySQL)?

+0

select * from()...? – Randy

+0

@Randy、私はアスタリスクを省略したいと言っているのを忘れました –

+0

このMySQLまたはSQL Server(または何か)ですか? SQL Serverでは、派生テーブルを使用するときに列にエイリアスを付ける必要があります。 –

答えて

1

ANSI-92標準によると、実装に依存します。セクション7.9、9.cから:

そうでない場合、のi番目の列の<列名>は、それ自体以外の任意の列の実装依存と <列名とは異なる>は、 SQL文に含まれるテーブル によって参照されるテーブルのすべてのテーブル参照。

つまり、その時点で使用しているRDBMSに依存します。

ご参考までに、楽しい読書をお探しの場合はthe ANSI-92 standardsをご覧ください。

+0

ポインタが見つかりました。私はこの文書を知っていますが、そのような細部については、どうやって読むのかは分かりません。:-)まあ、私は運がありません。その 'i'インデックスで列にアクセスする方法さえありませんか?私はそのようなインデックスごとの構文を見たことがないので、私はそこにいるとは思わない... –

1

オラクルでは、あなたが行うことができます

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

これはうまくいかなかったような印象を受けました。たとえば10g ...? –

+0

私は実際にそれを試して確かめました。あなたがそれを何のために使うのかは分かりませんが、それはうまくいきます。 – Kal

+0

あなたは正しいです、それはOracleで動作します。申し訳ありませんが、質問はちょっと変わったかもしれません。これは、データベースフレームワークの構文抽象化のためのものです。これらのユースケースの一般的なルールを知る必要があります。または、RDBMS規則ごとに –