我有一个表Table_1:
D1----D2
123----NULL
1a3----NULL
35s----NULL
tg45---NULL
如果我这样做:
SELECT * FROM Table_1 A
RIGHT JOIN(
SELECT *
FROM Table_1 B
WHERE
SUBSTRING(B.D1,len(B.D1)-1,100) NOT LIKE '%[^0-9]%') C
ON A.D1=C.D1
WHERE CONVERT(INT,(SUBSTRING(A.D1,len(A.D1)-1,100)))<25;
我得到一条记录的结果:
123----NULL----123----NULL
没关系。
如果我将右连接更改为内连接,则会出现错误:
Msg 245,Level 16,State 1,Line 1
转换nvarchar值&#39; a3&#39;数据类型为int。
你能解释一下为什么会这样吗?
答案 0 :(得分:0)
使用RIGHT JOIN
,您将获得在使用INNER JOIN
时将被排除的其他值,因为它将包含“RIGHT”表中的所有记录。在这种情况下,您的子选择,别名为'C'。
其中一个附加值为a3
,无法转换为整数。