Mysql子查询命令

时间:2013-09-08 14:33:45

标签: mysql subquery sql-order-by

mysql子查询中结果的顺序是否会影响实际查询的顺序? 我尝试了但没有达到真正的结果,因为有时似乎是这样,有时却没有。

例如:

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

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

感谢。

4 个答案:

答案 0 :(得分:3)

您的外部查询没有ORDER BY;因此,订单不能保证。

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

答案 1 :(得分:2)

不可以,如果您想根据需要更改订单,请更好地使用JOIN

这样的事情: -

select name 
from people p inner join member m on p.pid = m.mid
order by p.name

答案 2 :(得分:1)

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

答案 3 :(得分: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可能有重复项,并且您希望与每个成员关联的最早日期。