を抽出するので、私は=このwhere句のselect句の列番号を使用します。 allias元の名前
SELECT a as d,b,c FROM myTable
WHERE a=1;
のようなクエリがSELECTED.1 = 1のようなものを入力するか、何らかの形でDので、元の名前alliasを抽出することが可能と代わりの = 1です持って言うことができます1が機能しない
を抽出するので、私は=このwhere句のselect句の列番号を使用します。 allias元の名前
SELECT a as d,b,c FROM myTable
WHERE a=1;
のようなクエリがSELECTED.1 = 1のようなものを入力するか、何らかの形でDので、元の名前alliasを抽出することが可能と代わりの = 1です持って言うことができます1が機能しない
WHERE句が評価されるときの内部的な複雑さのためにこれを行うことはできません。しかし、あなたがエイリアシングしていることが、あなたがむしろ繰り返すことのない長い表現であれば、これに対する典型的な解決策があります。 https://forums.oracle.com/forums/thread.jspa?threadID=1107532から:
これまでの標準的なソリューションです、あなたがで、別名を使用して、(WHERE句の述語なし)インライン ビューにクエリを移動し、 節の述語を追加外部クエリ。
したがって、このような何か:あなたの例の場合
select ... from (select ... here complex expression that is aliased ... from ... where) A where ... here condition that uses the A.alias column ...
、それは次のようになります。
SELECT d, b, c
FROM (SELECT a AS d, b, c FROM myTable) AS myAliasedTable
WHERE d = 1
しかし、もちろん、これはあなたの文字通りの例では意味がありません。エイリアシングしているものが単にカラム名である場合は、WHEREの実際のカラム名を使用してください。その場合は実際の欠点はありません。
また、このメソッドを使用する場合は、できるだけ多くのWHERE句をエイリアス化された列を参照しない部分を意味する内部クエリに配置して、結果のサイズを制限する必要がありますエイリアステーブル。また、あなたの例ではb
にテストしたい場合たとえば、それは次のようになります。
SELECT d, b, c
FROM (
SELECT a AS d, b, c
FROM myTable
WHERE b = 1
) AS myAliasedTable
WHERE d = 1
が使用common table expression (CTE)例えば
WITH T
AS
(
SELECT a as d, b, c
FROM myTable
)
SELECT *
FROM T
WHERE d = 1;
なぜこれをやりたいですか? –
@ JohnSaundersなぜなら、エイリアス化されているものは複雑な式なので、where句で繰り返す必要はないからです。 –