2012-02-12 17 views
1

例を追加して変更する必要があります。は、どのように私は私の構文が 'WHERE' 節

SELECT s.title, t.description, 
u1.value * s.cache_value as Cache, 
u2.value * s.drive_value as Drive, 
u3.value * s.error_value as Error, 
u3.value * s.error_value + u3.value * s.error_value as ErrorHigh, 
u3.value * s.error_value - u3.value * s.error_value as ErrorLow, 
m.area 
FROM storage s 
JOIN status t on t.id = s.status_id 
JOIN manufac m on m.id = s.area 
JOIN unit u1 on s.cache_unit_id = u1.id 
JOIN unit u2 on s.drive_unit_id = u2.id 
JOIN unit u3 on s.error_unit_id = u3.id 

望ましい目標:

SELECT s.title, t.description, 
u1.value * s.cache_value as Cache, 
u2.value * s.drive_value as Drive, 
u3.value * s.error_value as Error, 
u3.value * s.error_value + u3.value * s.error_value as ErrorHigh, 
u3.value * s.error_value - u3.value * s.error_value as ErrorLow, 
m.area 
FROM storage s 
JOIN status t on t.id = s.status_id 
JOIN manufac m on m.id = s.area 
JOIN unit u1 on s.cache_unit_id = u1.id 
JOIN unit u2 on s.drive_unit_id = u2.id 
JOIN unit u3 on s.error_unit_id = u3.id 
WHERE 123 BETWEEN ErrorHigh AND ErrorLow; 

MySQLの返し構文エラー不明列ErrorHigh

注:ErrorHighと 'ErrorLow`は、計算された値を表示するために作成する新しい列です

+0

はhttp://stackoverflow.com/questions/9197215/fighting-inner-join-unknown-column-when-trying-を見ます対処 - 反復 - 保存関数/ 9197376#9197376 – Kaii

答えて

4

1054エラーは、SQLがWHERE句のカラム別名の参照をサポートしていないためです。最も初期のMySQLサポートはGROUP BYです。しかし、ほとんどのデータベースでは、ORDER BY句のカラム別名のみがサポートされています。

引き続き列エイリアスを使用する場合は、それが表す操作は、副選択、派生テーブル/インラインビューで実行する必要があります。そうでなければ、あなたはそれが表す操作で列の別名を置き換えることができます - このように:

WHERE 123 BETWEEN u3.value * s.error_value + u3.value * s.error_value 
       AND u3.value * s.error_value - u3.value * s.error_value 
+0

ああ。ありがとうございますOMG Ponies – stackoverflow

+0

サブセレクトアプローチの例と説明はこちらhttp://stackoverflow.com/questions/9197215/fighting-inner-join-unknown-column-when-trying-to-avoid-a-repeated- stored-func/9197376#9197376 – Kaii

関連する問題