我有几张桌子(不是我的),想要加入数据。问题是左表的列有时是数字,有时是字符串。右表的列始终是一个数字。无法转换左列时出现SQL错误。
如何尽可能加入列?
答案 0 :(得分:1)
更改on子句的顺序,以便首先列出A值,以便引擎尝试隐式转换为字符串(A的数据类型)而不是int(B的数据类型)
SELECT a.*, B.*
FROM A
LEFT JOIN B
-- on B.AID=A.ID --Instead of B.AID= A.ID
on A.ID = B.AID
不要让引擎进行隐式转换,强制将B值转换为字符串...
将数字转换为字符串...
SELECT a.*, B.*
FROM A
LEFT JOIN B
on trim(A.ID) = cast(B.AID as varchar(100))
或
仅在A为数字时加入,而在A的其余部分加入则不加入。注意:您可能需要拼出B中的值来代替下面的连接。
SELECT a.*, B.*
FROM (SELECT * from A where isNumeric(ID)) A
LEFT JOIN B
on A.ID = cast(B.AID as varchar(100))
UNION
SELECT A.*, B.*
FROM A
LEFT JOIN (SELECT * From B where 1 =0)
WHERE not isNumeric(ID)