我的查询中有一个函数,该函数使用表中的列并为该输入生成唯一的数字。
SELECT FunctionResultsinUniqueNumber(t.[table1Column]) AS Col1
FROM Table1 t
我还想加入另一个已经具有唯一编号的表。
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]
感谢您的澄清,帮助。
答案 0 :(得分:1)
许多数据库支持横向联接。我猜您正在使用SQL Server,它使用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;
答案 1 :(得分:1)
您需要使用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;