我在SQL Server2008 R2上有以下方案:
以下查询将返回:
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行
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但是,当切换内部连接顺序时,它不会返回任何行
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这是可能的吗?
打印屏幕:

发布于 2017-06-16 01:45:24
对于内部联接,联接操作的顺序不会影响查询(它可能会影响行和列的顺序,但会返回相同的数据)。
在这种情况下,结果集是所有表的笛卡尔乘积的子集。顺序并不重要。
顺序可以而且确实对外部连接很重要。
在您的示例中,其中一个表是空的。因此,笛卡尔乘积为空,结果集也为空。就是这么简单。
https://stackoverflow.com/questions/44573683
复制相似问题