MySQL相当于MS SQL的Cross Apply

时间:2015-10-01 18:05:24

标签: mysql sql sql-server

如果您已经习惯了MS SQL的Cross Apply,那么您可能想知道如何在MySQL中完成同样的事情。我发现the reverse question并认为直接问题可以帮助任何人搜索如何将此功能从MS SQL迁移到MySQL。

在此示例中,Cross Apply允许您修改字段并在同一查询中使用结果。问题是如何在MySQL中实现它。

SELECT v.Var1, POWER(v.Var1, 2) AS Var2Squared
    FROM [Table] t
    CROSS APPLY (SELECT t.Column1 + t.Column2 AS Var1) v

2 个答案:

答案 0 :(得分:1)

您对自己问题的回答表明CROSS APPLY所做的非常有限的子集。对于此特定问题,您可以使用子查询:

select t.*, power(var1, 2)
from (select (column1 + column2) as var1
      from aTable
     ) t;

这更昂贵,因为它会导致实现子查询的实现。另一种方法是重复表达:

select (column1 + column2) as var1, power((column1 + column2), 2)
from aTable;

这是我在MySQL中可以轻松想到的唯一安全方法,可以做你想做的事。

答案 1 :(得分:0)

同样的事情(更新:虽然not ideally)可以通过用户定义的变量(" at sign / @")完成:

SELECT @var1 := column1+column2 AS var1,
  POWER(@var1, 2) AS var2squared
  FROM aTable