在 WHERE 子句中使用列别名

Use column alias in WHERE clause

我的查询中有一个函数使用 table 中的一列,并为该输入生成一个唯一的数字。

SELECT FunctionResultsinUniqueNumber(t.[table1Column]) AS Col1 
FROM Table1 t

我也想加入另一个已经有唯一编号的 table。

SELECT o.[SameUniqueValueAsGeneratedByTheFunctioninTable1] AS Col2
FROM Table2 o

我不确定这是否可行,但我想引用函数结果以等于 Table2 中的列以成功连接:比如说,

SELECT FunctionResultsinUniqueNumber(t.[table1Column]) AS Col1 
FROM Table1 t
LEFT JOIN Table2 o
ON Col1 = o.[SameUniqueValueAsGeneratedByTheFunctioninTable1]

感谢任何澄清,帮助。

许多数据库都支持横向连接。我猜您正在使用 SQL 服务器,它支持这些使用 APPLY。这允许您将列定义移动到 FROM 子句:

SELECT . . . 
FROM Table1 t CROSS APPLY
     (VALUES (FunctionResultsinUniqueNumber(t.[table1Column]))
     ) v(col1) JOIN
     Table2 t2
     ON v.Col1 = t2.SameUniqueValueAsGeneratedByTheFunctioninTable1;

否则,您将使用子查询:

SELECT . . . 
FROM (SELECT t.*,
             FunctionResultsinUniqueNumber(t.[table1Column] as col1
      FROM t
     ) t JOIN
     Table2 t2
     ON t.Col1 = t2.SameUniqueValueAsGeneratedByTheFunctioninTable1;

你需要用ON子句再次调用它:

SELECT FunctionResultsinUniqueNumber(t.[table1Column]) AS Col1 
FROM Table1 t LEFT JOIN 
     Table2 o
     ON FunctionResultsinUniqueNumber(t.[table1Column]) =
        o.[SameUniqueValueAsGeneratedByTheFunctioninTable1];

你也可以使用子查询:

SELECT FunctionResultsinUniqueNumber(t.[table1Column]) AS Col1 
FROM (SELECT FunctionResultsinUniqueNumber(t.[table1Column]) AS Col1
      FROM Table1 t
      ) t LEFT JOIN
      Table2 t2
      ON t.Col1 = t2.SameUniqueValueAsGeneratedByTheFunctioninTable1;