5

mysql 子查询中结果的顺序会影响实际查询的顺序吗?我试过了,但没有得到真正的结果,因为有时看起来如此,有时却不然。

例如:

SELECT name FROM people WHERE pid IN (SELECT mid FROM member ORDER BY mdate)

在这种情况下,“order by”子句会影响结果的顺序吗?

谢谢。

4

4 回答 4

3

您的外部查询没有ORDER BY; 因此,无法保证顺序。

我想在这种特殊情况下唯一可能受到影响的部分是优化器,它可能会生成不同的执行计划,具体取决于子查询结果的排序方式......

于 2013-09-08T14:55:16.950 回答
3

不,它不能,如果您想根据需要更改订单,那么最好使用JOIN

像这样的东西: -

select name 
from people p inner join member m on p.pid = m.mid
order by p.name
于 2013-09-08T14:42:35.583 回答
1

无论外部查询结果是否依赖于子查询中的 order by 子句,都不应依赖于 order。如果您需要外部查询结果的任何特定顺序,则应在外部查询上显式使用 order by 子句。AFAK,仅当您必须在子查询的 SELECT 子句中使用 TOP 子句时,在子查询中使用 order by 子句才有意义。

于 2013-09-08T14:49:46.227 回答
1

实在不行。数据来自from子句。您的子查询在where子句中。它仅用于过滤行。如果您要订购:

select p.name
from people p join
     (select member, min(mdate) as minmdate
      from member
      group by member
     ) m
     on p.pid = m.mid
order by minmdate;

也就是说,加入两个表之间的结果。我假设member可能有重复,并且您希望与每个成员相关联的最早日期。

于 2013-09-08T14:51:22.023 回答