ホームページ >データベース >mysql チュートリアル >WHERE 句で列のエイリアスを使用できますか?
WHERE 句で列の別名を参照
次の SQL クエリでは、WHERE 句で列のエイリアスが使用されています。
<code class="language-sql">SELECT logcount, logUserID, maxlogtm , DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary WHERE daysdiff > 120</code>
このクエリを実行すると、「無効な列名 daysdiff」というエラーが発生します。これは、daysdiff のような列の別名には通常、WHERE 句で直接アクセスできないためです。
この問題を解決するには、SQL で最初に SELECT ステートメントを実行し、次に WHERE 句を実行するように強制できます。これは、括弧または共通テーブル式 (CTE) を使用して実現できます。
方法 1: 括弧を使用する
以下の変更されたクエリでは、SELECT ステートメントが括弧で囲まれており、WHERE 句の前で強制的に実行されます。
<code class="language-sql">SELECT * FROM ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) as innerTable WHERE daysdiff > 120</code>
方法 2: CTE を使用する
また、次の例のように CTE を使用することもできます。
<code class="language-sql">WITH CTE AS ( SELECT logcount, logUserID, maxlogtm, DATEDIFF(day, maxlogtm, GETDATE()) AS daysdiff FROM statslogsummary ) SELECT * FROM CTE WHERE daysdiff > 120</code>
括弧または CTE を使用すると、SQL 操作の論理順序を制御でき、WHERE 句で列の別名を参照し、そのようなエラーを解決できます。
以上がWHERE 句で列のエイリアスを使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。