У меня есть две таблицы, которые я пытаюсь объединить в определенном столбце (разделяемом между ними). Данные в этих столбцах должны представлять числа, но данные на самом деле являются символами, а некоторые из значений не являются числовыми (например, «2,3,4» или «n/a»). Я игнорирую строки с нечисловыми значениями этого столбца. Я подхожу столбцы как числовой в соединении, потому что «001» должен соответствовать «1», «01», «0001» и т.д. Внутренний соединив их работы, левое внешнее присоединение их не будет:Ошибка Odd LEFT JOIN
SELECT *
FROM Table1 T1
INNER JOIN Table2 T2
ON T1.ID NOT LIKE '%[^ 0-9]%'
AND T2.ID NOT LIKE '%[^ 0-9]%'
AND T1.ID + 0 = T2.ID + 0
-- Success!
SELECT *
FROM Table1 T1
LEFT JOIN Table2 T2
ON T1.ID NOT LIKE '%[^ 0-9]%'
AND T2.ID NOT LIKE '%[^ 0-9]%'
AND T1.ID + 0 = T2.ID + 0
-- Conversion failed when converting the nvarchar value '2,3,4' to data type int.
Почему я получаю ошибку на внешнем соединении, но не внутреннее соединение?
P.S .: Исправление данных не опция. Это не мои данные; Я не могу прикоснуться к нему. Мне нужно найти способ работать с ним.
EDIT: Я бегу SQL Server 2008 R2 RTM
Так, чтобы быть понятным, вы получите сообщение об ошибке? Или вы не получаете данные, которые ожидаете? Если вы получаете сообщение об ошибке, какая ошибка? –
Что должно делать 'T1.ID + 0 = T2.ID + 0'? Почему бы не просто «T1.ID = T2.ID»? – wdosanjos
вы забыли «внешний» в своем запросе. SELECT * FROM Table1 T1 LEFT Outer JOIN Table2 T2 on ... –