Я использую SQL Server 2008 R2, и у меня есть запрос на внутреннее объединение 3 таблиц:
select * from t1 INNER JOIN t2 on t1."Account Key" = t2."Account Key"
INNER JOIN t3 on t2."Account Key" = t3."Account Key"
Проблема заключается в том, что я получаю предупреждение "no join предикат" во втором внутреннем соединении;в дополнение к этому, он выполняет перекрестное произведение таблицы, созданной 1-м объединением с t3, что делает запрос выполненным навсегда (помимо выдачи неверных результатов).
Я выполнил следующий запрос, чтобы увидеть, есть ли какие-либо ключи учетной записи, равные с обеих сторон последнего соединения:
select "Account Key" from t1 INNER JOIN t2 on t1."Account Key" = t2."Account Key"
INTERSECT
select "Account Key" from t3 on t2."Account Key" = t3."Account Key"
Я получаю 0 строк, что означает, что ключей учетной записи нетравны с обеих сторон соединения.Однако не должен исходный запрос давать 0 строк вместо перекрестного произведения, так как я использую "внутреннее соединение"?
Обновление : t3 является точнымпредставление, столбец которого [Ключ учетной записи] фактически является вычисляемым столбцом:
CAST(bid AS varchar(5)) + '-' + dbo.ConvertNumericToPaddedChar(RMKEY, 20) AS [Account Key]
Обновление : dbo.ConvertNumericToPaddedChar (RMKEY, 20) является причиной проблемы.Кажется, что при выполнении внутренних объединений SQL Server не может использовать столбцы, которые были построены с использованием пользовательских функций.
Кто-нибудь из вас знает как-нибудь об этом?