私はmysqlに膨大な行数のテーブルを持っています(私は一般的なSQLソリューションを探していますが)
very_big_table(INT a, INT b, INT c, ...)
SELECTステートメントが欲しかった
SELECT a,
(b + c) as expression1,
(b + c + a) AS expression2 -- basically (expression1 + a)
FROM very_big_table
WHERE ...
GROUP BY a
ORDER BY a DESC
これは、expression1が単純である限り、見栄えがよく、読みやすくなっています。
ただし、CASE-WHEN / IFNULL()/ SUM()/ MIN()/ STRCAT()または一部の演算子がこれらの式で使用されると、読み取りとデバッグが困難になります。
mysql値を変数インラインに割り当てるすでに尋ねられた質問のいくつかを通過し
ました別の列(SQLServer)の列の値を使用しますか?
同じselectステートメントで条件付き列の値を使用するにはどうすればよいですか?
しかし、私が次のようなアプローチを使用する場合
SELECT a,
expression1,
(expression1 + a) AS expression2
FROM
(SELECT a,
(b + c) AS expression1
FROM very_big_table
WHERE ...
GROUP BY a) as inner_table
ORDER BY a DESC
これは正常に機能しますが、このクエリの実行には70倍の時間がかかります。少なくとも一度だけですが、私がそれを発射したとき。出力列に
複数のレベルの式がある場合はどうなりますか?
読みやすさを損なうことなく、これに対処するためのエレガントな方法はありますか?
ところで、SQL標準またはベンダーでサポートされていないselectステートメントでのこの式の再利用またはエイリアス参照がないのはなぜですか?(単一のSELECTステートメント式に循環評価がない場合。その場合、コンパイラーは失敗します)