【问题标题】:Difference between right and inner join右连接和内连接的区别
【发布时间】: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 子句怎么会考虑不属于内部连接条件的记录,仍然继续工作,如果我发现了什么会更新。

标签: sql join


【解决方案1】:

使用RIGHT JOIN,您将获得在使用INNER JOIN 时将被排除的附加值,因为它将包括“RIGHT”表中的所有记录。在这种情况下,您的子选择别名为“C”。

其中一个附加值是a3,它不能转换为整数。

【讨论】:

  • 但问题在于 INNER JOIN,而不是 RIGHT JOIN。
猜你喜欢
  • 2010-10-01
  • 2012-01-31
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2011-05-23
  • 2011-06-10
相关资源
最近更新 更多