Использовать псевдоним столбца в предложении WHERE - PullRequest
0 голосов
/ 27 февраля 2020

В моем запросе есть функция, которая использует столбец в моей таблице и дает уникальный номер для этого ввода.

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

Я также хотел бы присоединиться к другой таблице, которая уже имеет этот уникальный номер.

SELECT o.[SameUniqueValueAsGeneratedByTheFunctioninTable1] AS Col2
FROM Table2 o

Я не уверен, возможно ли это, но я хотел бы сослаться на результат функции чтобы сравнить столбец в таблице 2 для успешного объединения: скажем,

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

Спасибо за любые разъяснения, помогите.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Вам нужно вызвать его снова с помощью 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;
1 голос
/ 27 февраля 2020

Многие базы данных поддерживают боковые объединения. Я предполагаю, что вы используете 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;
...