sql左连接只有当左列可以是一个数字时

时间:2016-12-12 18:23:21

标签: sql-server-2008

我有几张桌子(不是我的),想要加入数据。问题是左表的列有时是数字,有时是字符串。右表的列始终是一个数字。无法转换左列时出现SQL错误。

如何尽可能加入列?

1 个答案:

答案 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)
相关问题