2

我有一个查询,其中包括LIMIT主表和JOIN.

我的问题是:之前会发生什么?查询找到的xLIMIT然后JOIN对这些行执行首先JOIN在所有行上执行然后再执行LIMIT

4

2 回答 2

3

LIMIT适用于应用它的查询。它将在该查询中的 s 之后应用于查询JOIN,但如果派生表被编辑到其他表,则 that/those (s) 紧随其后。JOINJOIN

例如

SELECT ..
  FROM (SELECT ..
          FROM TABLE1 T1
          JOIN TABLE2 T2 ON ..
         LIMIT 10) X
  JOIN OTHERTABLE Y
 LIMIT 20;
  • JOINT1 和 T2 之间首先出现
  • LIMIT10 应用于上一步的结果,因此只有来自该派生表的 10 条记录将用于外部查询
  • LIMIT20 应用于JOINX 和 Y 之间的结果

虽然 LIMIT 是PostgreSQLMySQLSQLite的特定关键字,但 TOP 关键字和SQL Server中的处理方式相同。

于 2012-10-29T04:15:01.310 回答
1

首先在所有行上执行 JOIN,然后在 LIMIT 之后

于 2012-10-29T04:18:16.187 回答