两个查询返回了不同的结果

时间:2015-09-01 12:07:07

标签: mysql sql

我遇到SQL查询问题。我有两个几乎相同的查询,区别在于第一个只返回一列id,第二个返回所有列*。查询如下:

查询1:

SELECT id 
FROM `import_data` 
WHERE 1 AND parent IS NULL 
ORDER BY CONCAT(category_1, COALESCE(category_2, ""), COALESCE(category_3, "")) DESC;

查询2:

SELECT * 
FROM `import_data` 
WHERE 1 AND parent IS NULL 
ORDER BY CONCAT(category_1, COALESCE(category_2, ""), COALESCE(category_3, "")) DESC;

每个查询都有不同的结果顺序,即使我指定了相同的ORDER BY

1 个答案:

答案 0 :(得分:4)

如果您有多个CONCAT(category_1, COALESCE(category_2, ""), COALESCE(category_3, ""))相同的行,您会得到不同的订单。

SQL如何对键值相同的行进行排序?答案是排序是任意的,可以从一个查询更改为下一个查询。 SQL确实保证稳定排序,这意味着当存在关联时,最终排序的顺序是不确定的。

我建议您只需将id添加到order by子句:

ORDER BY CONCAT(category_1, COALESCE(category_2, ""), COALESCE(category_3, "")) DESC, id

如果id是唯一的,那么这两个查询将返回相同的顺序。