gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:36:47 24 4
gpt4 key购买 nike

我有这个问题

 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 的所有行进行分组,并从 date_value 中保留最小值。这显示了正确的结果(我想),但更改了在 start - end 部分创建的行的顺序。关于保持秩序的任何想法?

最佳答案

您没有 ORDER BY 子句。如果没有 ORDER BY 子句,您就无法期望您的结果集具有特定的顺序。如果您希望您的数据以特定顺序出现,那么您需要以这种方式进行排序。这可能意味着计算内部表表达式中的一列,以允许您正确排序外部结果集。您实际如何实现排序取决于您的数据以及您需要它的顺序。

有关详细信息,请参阅:

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

关于mysql - 结果正确,但在 sql 中的顺序不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24096303/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com