2011/11/04

[SQL] WHERE句ではSELECT句でつくったカラム名は使えない

深く考えたことなく使っていたので、言われてみれば、ああそうなんだという感じ。

SELECT句で命名したカラムはWHERE句で使えない

SELECT id, end - start AS diff
FROM table
WHERE diff > 3; //ここでエラー

↑だとエラーになる。

なんでかというと…
SQLには各句の解釈される順番があって
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY
という順序だから

WHEREでカラム名を指定しても、SELECTはまだ解釈されてないから、そんなカラムないよってことになる

上の例でいうと

SELECT id, end - start AS diff
FROM table
ORDER BY diff DESC;

は可能

考えたことなく使ってたなー


参考:

0 件のコメント:

コメントを投稿