我正在使用以下查询:
SELECT plan.datum, plan.anketa, plan.ai as autoinc, plan.objekt as sifra , objekt.sifra, objekt.temp4_da FROM plan
LEFT JOIN objekt ON plan.objekt = objekt.sifra WHERE objekt.temp4_da = '1'
AND objekt.sifra >= 30 AND plan.datum > '2019-01-15' and plan.datum < '2019-01-30'
GROUP BY objekt.sifra
ORDER BY plan.datum ASC, plan.objekt ASC
结果应该是从 2019 年 1 月 15 日开始的,但正如您所看到的,它已排序到最后日期 plan.datum < '2019-01-30'
...
我怎样才能实现这个目标?
最佳答案
您的结果来自 MySQL 使用 GROUP BY
处理错误 SQL 查询的能力。例如,大多数 DBMS 无法处理这样的查询
SELECT col1, col2
FROM tab
GROUP BY col1
如果 col1
是 tab
的主键,某些 DBMS 会处理此查询,但是,MySQL 始终处理它并返回一个随机 col2
如果有多个 col2
值对应于 col1
!例如,有表
col1 | col2
-----------
a | 1
a | 2
那么 MySQL 可能会在周一返回 (a, 1)
结果,并在周二使用上面所示的 SQL 查询返回 (a, 2)
(我有点讽刺) )。
我相信这也是你的情况。 MySQL 为每个 objekt.sifra(查询中的属性分组)随机选择 plan.datum,随后您会错过一些 plan.datum 值在结果中。修复您的查询以获得确定性值,您将摆脱问题。
关于mysql - 排序依据未按预期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54195524/