2011-06-22 20 views
0

私はMySQL's user defined variablesを使用しようとしていますが、制約のために、1つのクエリが変数を設定し、2つ目がそれを使用する方法と同じ方法で使用できません。私の要件は、クエリで複数回使用できることです。同じクエリMySQLユーザ定義変数

は、次のことを考えてみましょう:

SELECT (Some Really Taxing Calculation) AS Total FROM Purchases 
WHERE Total < 55 AND itemName = "Bananas" 
OR Total > 90 AND itemName = "Apples" 
OR Total = 30 AND itemName = "Peaches" 
ORDER BY Total 

それは一度だけTotal計算を実行し、クエリ全体の結果を複数回使用することが本当にいいことです。現在、1つのクエリで動作させる唯一の方法は、使用されているすべての場所でそれを再実行することです。Totalは、未知の列が使用されたというエラーを返します。

+0

制限事項を説明できますか? –

+0

FROM句に入れた場合、一度だけ計算されるのではなく、 'total.Value'のようなもので値を取得できます。 – Dirk

+0

@ RyanGross、単一のクエリ、私はお互いに関連する複数のクエリを実行することはできません。 – Robert

答えて

1

埋め込む...

SELECT 
    Total 
FROM 
    (SELECT (Some Really Taxing Calculation) AS Total, * FROM Purchases) AS Purchases 
WHERE Total < 55 AND itemName = "Bananas" 
    OR Total > 90 AND itemName = "Apples" 
    OR Total = 30 AND itemName = "Peaches" 
ORDER BY 
    Total 

注:それは計画の生成時に、サブクエリ(インラインビュー)はMySQLが拡張されます。クエリの前後に角かっこを入れても、必ずしもそれが愚かに非効率であることを意味しているわけではありません:)

0
SELECT *, total.Value 
FROM Purchases, (SELECT COUNT(*) as Value .... Some Really Taxing Calculation) total 
WHERE Total < 55 AND itemName = "Bananas" 
OR Total > 90 AND itemName = "Apples" 
OR Total = 30 AND itemName = "Peaches" 
ORDER BY Total 

だから基本的には、FROM句でネストされたSELECTタイプのクエリで、あなたの計算を行うと、あなたは、あなたのクエリで他の場所を使用することができますよりも、それを全体の名前を与えます。サブクエリ中の全計算

+0

これは、行に基づく計算を使用している場合は、合計内でその環境を再作成する必要があるため、基本的には他の場所と結合を2度適用します。 – Robert

+0

あなたが 'Some Really Taxing Calculation'の値を取得する必要がある場合は、はい、あなたは同じ輪を結合し直す必要があります。計算クエリ/文を最初に(それが必要とする依存関係で)書き、それを括弧で囲み、別のSQLクエリのFROM句にスティックします。 – Dirk

関連する問題