【问题标题】:Mysql subquery orderMysql子查询顺序
【发布时间】:2013-09-12 03:43:23
【问题描述】:

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

例如:

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

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

谢谢。

【问题讨论】:

  • “它不能”是否意味着绝对没有办法做到这一点?
  • 怎么办?在子查询中使用 order by 子句影响结果顺序?我的答案是否定的。

标签: mysql subquery sql-order-by


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    实在不行。数据来自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 可能有重复,并且您希望与每个成员关联的最早日期。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        类似这样的:-

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

        【讨论】:

        • 不会在这里工作意味着这只是我查询的一小部分,它在其他地方造成了问题,但你已经在这里回答了我的问题:D
        • 对不起,我没听清楚。我的回答能回答你的问题吗???
        • 它确实回答了我的问题。
        猜你喜欢
        • 2014-07-30
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多