我有两个表我试图加入到一个特定的列(两者之间共享)。这些列中的数据应该表示数字,但数据实际上是字符,并且其中一些值是非数字的(例如'2,3,4'或'n/a')。我忽略了具有此列的非数字值的行。我治疗的列数字的加入,因为“001”必须匹配“1”,“01”,“0001”等内加入他们的作品,左外加入他们并不:奇数左连接错误
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 .:修复数据是不是选项。这不是我的数据;我无法触摸它。我必须找到一个方法来处理它。
编辑:我正在运行SQL Server 2008 R2 RTM
所以要清楚,你会得到一个错误?或者你没有得到你期望的数据?如果您收到错误,错误是什么? – 2014-09-04 17:29:52
'T1.ID + 0 = T2.ID + 0'应该做什么?为什么不简单地'T1.ID = T2.ID'? – wdosanjos 2014-09-04 17:37:38
你在查询中忘记了“外层”。 SELECT * FROM Table1 T1 LEFT Outer JOIN Table2 T2 on ... – 2014-09-04 17:39:29