MySQL:在select本身中使用select中的值

Nat*_*n H 10 mysql sql aggregate-functions

首先,如果有人有更好的头衔,请帮忙.

如果我让我们说一个带有'day'列的'calendar'表.我有以下查询:

SELECT day, day AS testDay, testDay AS test2Day FROM calendar
Run Code Online (Sandbox Code Playgroud)

MySQL会抱怨"testDay"是一个未知的列.当然你会告诉我这句话没用,但我的陈述看起来更像是这样:

SELECT day, SOME_CRAZY_EXPRESSION_OF(day) AS testDay, EXPRESSION_OF(testDay) AS test2Day FROM calendar
Run Code Online (Sandbox Code Playgroud)

重点是我不想评估第一个表达式的两倍,以便在第二个表达式中使用它.那么有没有办法使用select中计算的值作为select本身的一部分?

我当然可以这样做:

SELECT day, SOME_CRAZY_EXPRESSION_OF(day) AS testDay, EXPRESSION_OF(SOME_CRAZY_EXPRESSION_OF(day)) AS test2Day FROM calendar
Run Code Online (Sandbox Code Playgroud)

但我正在努力避免浪费.如果我别无选择,那就是我要做的.

Joa*_*son 10

在MySQL中,你需要为表达式的值分配一个临时变量以便能够重用它,这应该这样做;

SELECT day, @tmp:=SOME_CRAZY_EXPRESSION_OF(day) AS testDay, 
    EXPRESSION_OF(@tmp) AS test2Day FROM calendar
Run Code Online (Sandbox Code Playgroud)

有关性能影响的更多分析,请参阅此页面以获取另一个示例.