正确的结果但在sql中的顺序不同

时间:2014-06-07 10:36:35

标签: mysql sql mysql-workbench

我有这个查询

 select s.emp_no, min(s.from_date)
 from
 **start** (select s.emp_no
 from salaries s, employees e
 where s.to_date=(select max(to_date) from salaries) and s.emp_no=e.emp_no
 group by s.salary DESC
 LIMIt 10) **end** as emps, salaries s
 where emps.emp_no=s.emp_no
 group by s.emp_no;

开始 - 结束部分是正确的。如您所见,它只有一个包含员工编号的字段。 emp_no是表工资的外键。表薪水有2个字段。 emp_no和from_date。每个emp_no可能有多个from_date值。我想从工资中对每个emp_no的所有行进行分组,并将min与date_value保持一致。这显示了更正结果(我猜),但更改了在开始 - 结束部分创建的行的顺序。关于保持秩序的任何想法?

1 个答案:

答案 0 :(得分:2)

您没有ORDER BY条款。如果没有ORDER BY子句,您不能指望您的结果集具有特定的顺序。如果您希望数据以特定顺序出现,那么您需要以这种方式订购。这可能意味着计算内部表表达式中的列以允许您正确地排序外部结果集。实际上如何实现排序取决于您的数据以及您需要的顺序。

有关详细信息,请参阅:

困难的概念是这样的。 SQL规范表明结果集行的排序是 不可预测 ,除非完全由ORDER BY子句确定。 不可预测性 是一个难以理解的概念。如果您从查询中遗漏了正确的ORDER BY规范,那么您的行 有时会按照预期的顺序显示 。通常,当您将应用程序从开发移动到生产服务器时,排序会发生变化。更糟糕的是,当生产服务器中的某些表超过大小阈值时,它可能会在生产数月后发生变化。请小心。