「where」句で列エイリアスを参照する必要がある本物のユースケースがあります。ここで概説した手法を使用しようとしています。これはSybaseとMySQLで機能することを期待していますが、H2とHSQLDBのどちらでも機能しないようです:http: //databases.aspfaq.com/database/how-do-i -use-a-select-list-alias-in-the-where-or-group-by-clause.html
親切にも私の問題を再現してみてください。その方法は次のとおりです。
create table CUSTOMER (code varchar(255), description varchar(255), active bit, accountOpeningDate date, currentBalance numeric(20,6), currentBalanceDigits int)
insert into CUSTOMER (code, description, active, accountOpeningDate, currentBalance, currentBalanceDigits) values ('BMW', 'BMW Motors', 0, '2011-01-01', 345.66, 2)
insert into CUSTOMER (code, description, active, accountOpeningDate, currentBalance, currentBalanceDigits) values ('MERC', 'Mercedes Motors', 1, '2012-02-02', 14032, 0)
次に、このSQLクエリは失敗します。
select nest.* from (
select CODE "id", DESCRIPTION "description",
ACTIVE "active",
accountOpeningDate "accountOpeningDate",
currentBalance "currentBalance"
from customer
) as nest
where nest.id = 'BMW'
「wherenest.id='BMW'」を削除しても問題ありません。ただし、where句またはselect句(next。*ではなくnest.id)のいずれかでエイリアスを使用しようとすると、クエリは失敗します。エラーコードは列「NEST.ID」が見つかりません。... [42122-167] 42S22 / 42122
エイリアスされた列名を使用してビューを作成し、ビューから選択しようとすると、同じエラーが発生します。例えば:
create view customer_view as
select CODE "id", DESCRIPTION "description",
ACTIVE "active",
accountOpeningDate "accountOpeningDate",
currentBalance "currentBalance"
from customer
それで:
select id from customer_view