代码之家  ›  专栏  ›  技术社区  ›  Jake Wilson

从temp_name=something的表中选择作为temp_name?

  •  5
  • Jake Wilson  · 技术社区  · 14 年前

    您知道如何在这样的SQL语句中将临时列名分配给返回值吗?

    SELECT something+this+that AS myvalue FROM mytable
    

    可以使用临时名称吗 myvalue 作为条件?

    SELECT something+this+that AS myvalue FROM mytable WHERE myvalue = 10
    

    我似乎找不到这样做的语法。我唯一能想到的方法是像这样重写整个列定义:

    SELECT something+this+that AS myvalue FROM mytable WHERE something+this+that = 10
    

    显然,上面的例子是一个微不足道的例子。我需要对其执行此操作的查询非常复杂,因此为每个条件重写每个返回的列定义将非常麻烦。

    不管怎样,这个的语法是什么?有可能吗?

    3 回复  |  直到 10 年前
        1
  •  7
  •   gbn    14 年前

    使用派生表…

    SELECT
        myvalue
    FROM
        (
        SELECT something+this+that AS myvalue FROM mytable
        ) foo
    WHERE
        myvalue = 10
    

    或者使用更优雅但相同的CTE

    ;WITh myCTE AS
    (
        SELECT something+this+that AS myvalue FROM mytable
    )
    SELECT
        myvalue
    FROM
        myCTE
    WHERE
        myvalue = 10
    

    或计算列,以便正常使用

    ALTER TABLE MyTable ADD myvalue AS something+this+that
    
        2
  •  0
  •   user114600    14 年前

    我认为这是不可能的,但是您可以通过将数据放入临时表中,然后运行第二个查询来运行其余的数据来进行欺骗。

    或者动态SQL,但我不喜欢后者。

        3
  •  -1
  •   Rafael    10 年前

    从myTable中选择一个+this+作为myValue,其中myValue=10

    你可以尝试这样的方法:

    SELECT something+this+that AS myvalue
    FROM  `users` 
    HAVING myvalue=10;