SQL在Where语句中使用别名

时间:2009-04-03 19:54:41

标签: sql

我想知道如何在where语句中使用别名。

示例:

SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable
WHERE Col1 = 'MySearch'

我使用MS SQL 2005

10 个答案:

答案 0 :(得分:51)

您可以使用“having”而不是“where”。

SELECT
    SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM
    MyTable
HAVING
    Col1 = 'MySearch'

在执行查询后执行“where”。 小心在合适的条件下使用它以避免性能问题。

答案 1 :(得分:19)

不可能,但您可以执行以下操作:

SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable
WHERE SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'

不需要子查询或黑客

答案 2 :(得分:16)

使用子查询:

SELECT * 
FROM 
  (SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1 FROM MyTable)
WHERE Col1 = 'MySearch'

答案 3 :(得分:8)

你可以这样做:

SELECT Col1
FROM ( SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) AS Col1 ) AS x
WHERE Col1 = 'MySearch'

答案 4 :(得分:5)

SELECT * FROM (
  SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
  FROM MyTable
)
WHERE Col1 = 'MySearch'

(我知道这在Oracle中有效,我相信它是标准的SQL,可以在MSSQL中使用。)

答案 5 :(得分:1)

我认为这是不可能的,但也许你可以看看SQL 2005上的公用表格式

像这样:

WITH MyCTE( Col1) AS
(
SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable
)
SELECT *
FROM MyCTE
WHERE Col1 = 'MySearch'

答案 6 :(得分:1)

使用视图或派生表。

使用派生表,您的示例如下所示:

select col1 
from 
(SELECT SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM MyTable) 
where col1='Mysearch'

答案 7 :(得分:1)

实际上,使用别名不会让你的查询更快,因为SQL优化器并不像你想象的那样愚蠢,所以我只是再次重复SUBSTRING表达式。

答案 8 :(得分:0)

答案是你做不到 - 你可以做到这一点

SELECT 
    SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1
FROM 
    MyTable
WHERE 
    SUBSTRING(Column1, 1, 4) + SUBSTRING(Column1, 4, 3) = 'MySearch'

答案 9 :(得分:0)

使用PostgreSQL 9.3+或Oracle 12c,现在可以使用横向连接来创建别名。

横向连接是女巫内部的关节,你可以参考前面的表格。

SELECT col1, col2,col3
FROM MyTable m
JOIN LATERAL (
    SELECT SUBSTRING(m.Column1, 1, 4) + SUBSTRING(Column1, 4, 3)  AS Col1 
) x ON true
WHERE Col1 = 'MySearch'

使用此语法,您不必使用可能无法执行的“*”或重新复制所有列。