gpt4 book ai didi

mysql - order by 子句如何在 mysql 中工作,排序显示奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 22:51:24 25 4
gpt4 key购买 nike

我有一个简单的查询

SELECT * FROM table_name order by non_unique_column LIMIT 0,50

这给了我一些顺序的记录列表。

但是当我从表中删除 * 并放入 一些列名 时,它会更改列表顺序。

对于 select 子句中的一些列组合,它给出了不同的顺序。

我无法找到 select 子句中列名称的哪种模式给出了不同的排序。

所以我想问一下有没有人遇到过这种问题?或者有人可以建议 order by 子句在这种情况下的工作原理吗?

注意:如果我在 select 子句中添加所有列,它会得到与 * 相同的结果。

请随时提出任何可能的建议。

谢谢。

更新:另外,当我将 LIMIT 0,50 之类的限制子句更改为 LIMIT 0,15 时,我得到了不同的集合记录。

更新2:

我创建了一个 sqlfiddle :

http://sqlfiddle.com/#!2/8f2340/3

请查看以下查询的结果

SELECT `M_ID`, `CON_FRST_NM`, `CON_PREFIX`, `CON_LST_NM`, `CON_MOB`,`CON_FAX` FROM `sample_table` order by `CON_PREFIX` LIMIT 0,60 

SELECT `M_ID`, `CON_FRST_NM`, `CON_PREFIX`, `CON_LST_NM`, `CON_MOB` FROM `sample_table` order by `CON_PREFIX` LIMIT 0,60

查询中的唯一区别是 CON_FAX 不出现在第二个查询的选择子句中。

请帮我弄清楚为什么会出现这种差异。

另请参阅以下使用不同限制子句的查询结果。注意:这是上述查询中的第二个查询。

SELECT `M_ID`, `CON_FRST_NM`, `CON_PREFIX`, `CON_LST_NM`, `CON_MOB` FROM `sample_table` order by `CON_PREFIX` LIMIT 0,60 

SELECT `M_ID`, `CON_FRST_NM`, `CON_PREFIX`, `CON_LST_NM`, `CON_MOB` FROM `sample_table` order by `CON_PREFIX` LIMIT 0,15

谢谢。

个人意见: 我认为这是一个错误/缺陷,因为即使我没有定义任何唯一的 order by 子句并且 mysql 正在根据其计算应用一些随机排序,我觉得它不应该取决于 select 子句中的内容。我的问题是对于一组给定的记录,无论我选择什么列,它都应该返回相同顺序的记录。

最佳答案

这个问题是因为您为您的订单指定了一个重复的值,也就是它的先生或夫人。没有保证选择订单,因为他们都是先生或夫人

如果你想确保它总是按特定顺序排列,那么你还应该将主键作为第二个顺序包括在内,以保持它完全相同......也就是

ORDER BY CON_PREFIX ASC, M_ID ASC

就目前而言,ORDER BY CON_PREFIX 为您提供的正是它应该为您提供的内容,前缀按升序排列,与导致此问题的限制无关,您只是还没有告诉 MySQL 您还希望如何将数据返回给您。


回应您在问题中编辑的PERSONAL OPINION....您所描述的是不合理的,以这种方式考虑,用于提取数据的任何默认顺序现在都消失了,因为您正在指定顺序。如果子句上没有任何 order by,那么 mysql 有一个通用的选择模式,但是一旦你在查询上放置一个 order by,它又消失了

关于mysql - order by 子句如何在 mysql 中工作,排序显示奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28061227/

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