このクエリが機能しないのはなぜですか?
SELECT 10 AS my_num, my_num*5 AS another_number
FROM table
この例では、他の計算でmy_numエイリアスを使用しようとしています。これにより、不明な列「my_num」が生成されます
これは私がやろうとしていることの簡易版ですが、基本的にはエイリアスを使用して他の計算を行いたいと思います。私の計算ははるかに複雑であり、それが異なる方法を数回繰り返すので、エイリアスするのはいいことです。
再利用したエイリアスを(SELECT alias)
でラップするだけです:
SELECT 10 AS my_num,
(SELECT my_num) * 5 AS another_number
FROM table
エイリアスをそのように使用するには、副選択を使用する必要があります
SELECT my_num*5 AS another_number FROM
(
SELECT 10 AS my_num FROM table
) x
SQLのエイリアスは、プログラミング言語の変数とは異なります。エイリアスは、特定のポイント(特にGROUP BY
およびHAVING
句)。ただし、SELECT
句でエイリアスを再利用することはできません。したがって、派生クエリ( Rubens Farias で推奨されるような)を使用して、基本的に列の名前を変更したり、計算列に名前を付けたりできます。
または、式が一般的に固定されている場合は、VIEW
を使用できます
CREATE VIEW table10 AS SELECT 10 AS my_num FROM table;
SELECT my_num * 5 AS another_number FROM table10;
派生クエリを使用するよりも少し速くなると思いますが、おそらく実際のクエリに大きく依存します。
または、単に作業を複製することもできます。
SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;
これはphp/Perlのようなもので便利かもしれません:
my $my_num = 10;
my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";
`` 別のオプションはAPPLY演算子を使用することです
SELECT my_num, my_num*5 AS another_number
FROM table
CROSS APPLY
(SELECT 5 AS my_num) X