【问题标题】:Are subqueries the only option to reuse variables?子查询是重用变量的唯一选择吗?
【发布时间】:2010-12-12 18:34:08
【问题描述】:

我想以这种形式使用 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 不是一个选项。 ;)

【问题讨论】:

    标签: sql mysql optimization subquery


    【解决方案1】:

    考虑到这段 SQL 代码

    SELECT 1 AS one, one*2 AS two
    

    从 SQL 语言的角度来看(为什么不;mysql 在遵守 ISO/ANSI SQL 标准方面有着良好的记录),您的one 不是变量;相反,它是列相关名称。不能在 SELECT 子句中使用具有相同作用域的相关名称,因此会出现错误。

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

    【讨论】:

    • 不,我实际上讨厌 Access-speak,所以幸运的是我不必忘记它——但我的假设来自编程语言,这导致了这种误解。谢谢您的回答!在接受答案后很少看到有见地的帖子。
    【解决方案2】:
    select @one := 1 as one, 2 * @one as two;
    

    user-defined variables

    【讨论】:

    • 太好了,谢谢。没有一天不学习新事物。
    猜你喜欢
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多