stackoverflow で検索しましたが、私の質問に対する正確な答えが見つかりませんでした。できれば助けてください。
次のような SQL ステートメントを作成したい:
SELECT
@tax1 := (complicated calculation formula),
@owe := (another complicated calculation formula),
IF(@owe=0, 0,@tax1/@owe)
FROM ...
ただし、ユーザー定義変数に関するMySQLのドキュメントでは、次のように言ってはいけません。
原則として、ユーザー変数に値を割り当てたり、同じステートメント内で値を読み取ったりしないでください。期待どおりの結果が得られる可能性がありますが、これは保証されません。ユーザー変数を含む式の評価順序は定義されておらず、特定のステートメント内に含まれる要素に基づいて変わる場合があります。さらに、この順序は、MySQL サーバーのリリース間で同じであるとは限りません。SELECT @a, @a:=@a+1, ... では、MySQL は最初に @a を評価し、次に代入を行うと考えるかもしれません。ただし、ステートメントを変更すると (たとえば、GROUP BY、HAVING、または ORDER BY 句を追加することによって)、MySQL が異なる評価順序で実行計画を選択する可能性があります。
私の目標は、これらの非常に複雑な数式をコピーして貼り付けることを避けることです。これは読みやすさを妨げるためです。数式が変更されるたびに、すべての場所で変更されていることを確認する必要がありますが、そうすることでわかっています。大丈夫。
さらに、エイリアスは GROUP BY、HAVING、および ORDER 句でのみ機能するため、ALIASが機能しないこともわかっています。
他のいくつかの投稿を読み、最初にサブクエリを実行して @tax1 と @owe を最初に計算し、次に別のクエリを使用して結果を結合しました。しかし、これらの数式を単にコピーして貼り付けるよりもパフォーマンスが低下する可能性があると考えています。
誰かが彼らが何をするかについて何か提案はありますか? それとも、読みやすさとパフォーマンスのどちらかを選択することに行き詰まっていますか?
前もって感謝します。