子查询是重用变量的唯一选择吗?

时间:2009-11-03 19:09:13

标签: sql mysql optimization subquery

我想以这种形式使用MySQL:

SELECT 1 AS one, one*2 AS two

因为它比

更短更甜
SELECT one*2 AS two FROM ( SELECT 1 AS one ) AS sub1

但前者似乎不起作用,因为它希望一个是一个列。

在没有子查询的情况下,有没有更简单的方法来实现这种效果?

不,SELECT 2 AS two不是一种选择。 ;)

2 个答案:

答案 0 :(得分:3)

考虑这个SQL代码

SELECT 1 AS one, one*2 AS two

从SQL的角度来看语言(为什么不呢; mysql有很好的跟踪ISO / ANSI SQL标准的记录),你的one不是变量;而是一个列相关名称。您不能在SELECT子句中使用具有相同范围的相关名,因此会出错。

FWIW你的“更短更甜”的语法在使用MS Access数据库引擎时确实有效 - 是你学习它的地方吗?遗憾的是,Access数据库引擎在遵守标准方面的记录很差。据说需要很长时间才能学习Access-speak和学习SQL代码;)

答案 1 :(得分:2)

select @one := 1 as one, 2 * @one as two;

user-defined variables