我在stackoverflow中进行了搜索,但没有完全找到我的问题的确切答案,所以如果可以的话,请帮助我。
我“想要”构建一个这样的 SQL 语句:
SELECT
@tax1 := (complicated calculation formula),
@owe := (another complicated calculation formula),
IF(@owe=0, 0,@tax1/@owe)
FROM ...
但是,在 MySQL 的关于user-defined variables的文档中,它建议不要这样说:
作为一般规则,您永远不应为用户变量赋值并在同一语句中读取该值。您可能会得到预期的结果,但这不能保证。涉及用户变量的表达式的求值顺序是未定义的,并且可能会根据给定语句中包含的元素而改变;此外,不保证此顺序在 MySQL 服务器的版本之间是相同的。在 SELECT @a, @a:=@a+1, ... 中,您可能认为 MySQL 会先评估 @a,然后再进行赋值。但是,更改语句(例如,通过添加 GROUP BY、HAVING 或 ORDER BY 子句)可能会导致 MySQL 选择具有不同评估顺序的执行计划。
我的目标是避免复制和粘贴那些非常复杂的公式,因为它会妨碍可读性,如果公式每次都发生变化,我需要确保它在所有地方都发生变化 - 但我知道这样做,它会起作用美好的。
此外,我知道 ALIAS不起作用,因为别名仅在 GROUP BY、HAVING 和 ORDER 子句中起作用。
我阅读了其他一些帖子,首先进行子查询以计算@tax1 和@owe,然后使用另一个查询来组合结果。但我认为性能可能不如简单地复制和粘贴这些公式有效。
有没有人有任何建议他们会做什么?还是我坚持在可读性和性能之间进行选择?
提前致谢。