私はmysqlで次のクエリを書いていますが、0行を返します
select * from (select col1 as mycol from tbl) temp where temp.mycol = 5
しかし、次のクエリは 4 行を返します
select col1 as mycol from tbl where col1 = 5
最初のクエリの何が問題になっていますか?
それは私の最後でうまくいきます。しかし、私はあなたの問題を検索し、このスレッドを取得します:
MySQL クエリの WHERE 句で列エイリアスを使用するとエラーが発生する
MySQLもこれを述べています: http://dev.mysql.com/doc/refman/5.6/en/problems-with-alias.html
なぜそれが私にとってうまくいくのか、私も混乱しましたか?
エイリアスを (MySQL で) 参照したい場合は、WHERE の代わりに HAVING を使用する必要があります。エイリアスを参照していないため、2 行目は機能しますが、WHERE でエイリアスを参照しているため、最初のステートメントは失敗します。
あなたのコメントの問題への答えとして:
少し変更してみましたが、提案が機能しませんか??? select * from (select col1 as 'my col' from tbl) temp where 'temp.my col' = 5 — マンディープ シン
ここで発生している問題は、MySQL が「temp.my col」という列を探していることですが、実際に必要なmy col
のはテーブルで呼び出された列であるtemp
ため、これを行う必要があります。
select * from (select col1 as `my col` from tbl) temp where `temp`.`my col` = 5