Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL使用列名别名而不选择_Sql_Select_Alias - Fatal编程技术网

SQL使用列名别名而不选择

SQL使用列名别名而不选择,sql,select,alias,Sql,Select,Alias,我知道我可以指定如下列别名: SELECT stuff as mask 有没有一种方法可以指定列别名而不在结果集中返回该列数据?基本上,我希望能够通过以下操作使我的查询变得干净: SELECT doManipulationStuff(cleanCompactAlias) 在哪里 您可以使用子查询: select doManipulationStuff(cleanCompactAlias) from (select t.*, reallyLong.misleading.andAnnoying.

我知道我可以指定如下列别名:

SELECT stuff as mask
有没有一种方法可以指定列别名而不在结果集中返回该列数据?基本上,我希望能够通过以下操作使我的查询变得干净:

SELECT doManipulationStuff(cleanCompactAlias)
在哪里


您可以使用子查询:

select doManipulationStuff(cleanCompactAlias)
from (select t.*, reallyLong.misleading.andAnnoying.columnName as cleanCompactAlias
      . . .
     ) t

可以使用公共表表达式(CTE)创建具有别名的子查询:

WITH clean_cte AS
(
  SELECT reallyLong.misleading.andAnnoying.columnName1 as cleanCompactAlias1,
    reallyLong.misleading.andAnnoying.columnName2 as cleanCompactAlias2
)
SELECT doManipulationStuff(cleanCompactAlias1), 
  doManipulationStuff(cleanCompactAlias2)

这样,您就可以将所有别名放在CTE中,在调用函数时就可以忘记它。您仍然需要在某个地方进行别名处理,但这至少可以将其排除在主查询之外,以使其更具可读性。

…仅当您使用的SQL Server版本支持它时。还有其他支持CTE的RDBMS。但要点是——并不是所有人都支持这种语法。我相信MySQL没有。
WITH clean_cte AS
(
  SELECT reallyLong.misleading.andAnnoying.columnName1 as cleanCompactAlias1,
    reallyLong.misleading.andAnnoying.columnName2 as cleanCompactAlias2
)
SELECT doManipulationStuff(cleanCompactAlias1), 
  doManipulationStuff(cleanCompactAlias2)