Получение предупреждения «no join предиката», даже если я использую «inner join» - PullRequest
1 голос
/ 30 сентября 2010

Я использую 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 не может использовать столбцы, которые были построены с использованием пользовательских функций.

Кто-нибудь из вас знает как-нибудь об этом?

1 Ответ

1 голос
/ 30 сентября 2010

Я не уверен, почему ваш пример не сработает. Попробуйте окружить имена ваших столбцов [скобками] вместо «кавычек».

select * from  t1
INNER JOIN t2 on t1.[Account Key] = t2.[Account Key]
INNER JOIN t3 on t2.[Account Key] = t3.[Account Key]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...