首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内连接的顺序是否可以更改查询的结果

内连接的顺序是否可以更改查询的结果
EN

Stack Overflow用户
提问于 2017-06-16 01:38:44
回答 2查看 398关注 0票数 0

我在SQL Server2008 R2上有以下方案:

以下查询将返回:

代码语言:javascript
复制
select * from TableA where ID = '123'; -- 1 rows
select * from TableB where ID = '123'; -- 5 rows
select * from TableC where ID = '123'; -- 0 rows

当以以下方式联接这些表时,它返回1行

代码语言:javascript
复制
SELECT A.ID 
  FROM TableA A 
 INNER JOIN ( SELECT DISTINCT ID
              FROM TableB  ) AS D
  ON D.ID = A.ID
 INNER JOIN TableC C 
  ON  A.ID = C.ID 
ORDER BY A.ID

但是,当切换内部连接顺序时,它不会返回任何行

代码语言:javascript
复制
SELECT A.ID 
  FROM TableA A 
 INNER JOIN TableC C 
  ON  A.ID = C.ID 
 INNER JOIN ( SELECT DISTINCT ID
              FROM TableB  ) AS D
  ON D.ID = A.ID
ORDER BY A.ID

这是可能的吗?

打印屏幕:

EN

Stack Overflow用户

发布于 2017-06-16 01:45:24

对于内部联接,联接操作的顺序不会影响查询(它可能会影响行和列的顺序,但会返回相同的数据)。

在这种情况下,结果集是所有表的笛卡尔乘积的子集。顺序并不重要。

顺序可以而且确实对外部连接很重要。

在您的示例中,其中一个表是空的。因此,笛卡尔乘积为空,结果集也为空。就是这么简单。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44573683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档