2009-09-02 10 views
8

回避策はありますか?実際には、式全体を繰り返したり、UNIONやテンポラリテーブルを強制したりせずに、このようなことを実際に行うことはできますか?変数1が原因でどのようにmysqlの作品の定義されており、第2項目に利用できていないのでMySQLクエリの式を別のフィールドの変数として再利用することはできますか?

​​

、上記の概念は働くことはできません。

私はvariable2の式を繰り返すか、UNIONまたはテンポラリテーブルを使用して2回のパスを使用する必要があります。

これをより効率的に達成するために私が認識していないトリックはありますか?

(私は、彼らはその後、INSERTのために使用されるような変数1と変数2の両方のための答えを知っている必要があることに注意してください)任意のアイデアについて

ありがとう!

+1

の可能な複製を[Iは、SELECTクエリで計算されたフィールドは再使用することはできますか?] (http://stackoverflow.com/questions/6085443/can-i-resuse-a-calculated-field-in-a-select-query) –

答えて

6

プッシュ派生テーブルへの最初の計算:クイック検索はこの上がっ

select variable1 
    , complex_function(variable1, other_column) as variable2 
    , yet_another column 
    from (select complex_operation as variable1 
      , other_column 
      , yet_another_column 
      from whatever) dt 
+0

それは私が欲しかったよりも扱いにくいですが、私はあなたの努力のために最高の答えを与えるつもりです、ありがとうございます。 –

4
SELECT @v1:=(complex expression) AS variable1, 
     (complex expression * @v1) AS variable2 
+0

私はそれが簡単なのであれば、私はぞっとするつもりです。正直言って、それを理解するが、ありがとう! –

+4

ああ、何を知っていますか?上記のknittlのマニュアルページには、WHEREなどに基づいてフィールドが順不同で実行される可能性があるため、同じSELECTステートメントで設定された変数を使用しない、または依存しない警告が繰り返されています。 同じSELECT内で変数を再使用することはおそらく悪い考えです。これは、順次クエリのためのものです。 –

+0

私は個人的には、それが起こるようにしようとしても、マニュアルで警告された動作を見たことはありません。マニュアルがそれに対して警告するなら、私はそれを使用しません。 * bleh * – longneck

0

私は唯一の方法は、私はmysqlは、このようなケースに対応できると思っていたが、2番目のいずれかであなたの最初のcomplex_expressionを繰り返すことだと思います。

編集:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

+0

リンクをありがとう、何とか私は完全にMySQLのその部分を逃した! –

+0

このマニュアルへのリンクは、longneckのソリューションに欠陥があった理由を理解するのに非常に役立ちました。 –

関連する問題