mysql子查询中结果的顺序是否会影响实际查询的顺序? 我尝试了但没有达到真正的结果,因为有时似乎是这样,有时却没有。
例如:
SELECT name FROM people WHERE pid IN (SELECT mid FROM member ORDER BY mdate)
在这种情况下,“order by”-clause会影响结果的顺序吗?
感谢。
答案 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
可能有重复项,并且您希望与每个成员关联的最早日期。