【发布时间】:2015-02-11 21:41:58
【问题描述】:
我有一个表 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
没关系。
如果我将右连接更改为内连接,则会出现错误:
消息 245,级别 16,状态 1,第 1 行
将 nvarchar 值“a3”转换为数据类型 int 时转换失败。
你能解释一下为什么会这样吗?
【问题讨论】:
-
您无法控制评估的行。仅返回哪些行。你有一个 (SUBSTRING(A.D1,len(A.D1)-1,100)) 不是整数。
-
我猜你的意思是,“如果我将内连接更改为右连接”?
-
没有。当我有权加入时,它正在工作。这很有趣。
-
我试过了,奇怪的是 where 子句怎么会考虑不属于内部连接条件的记录,仍然继续工作,如果我发现了什么会更新。