我遇到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
。
答案 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
是唯一的,那么这两个查询将返回相同的顺序。