我有一张桌子:
_d_d_
1
2
3
从这个表中,我希望得到特定lang的行和外部if,如果这个lang不存在外部if,我想要与任何其他lang一起的行。
子查询对表进行正确排序,但当我添加组by时,子查询的排序将丢失。这在较早的mysql版本中有效,但在5.7版本中不起作用。
(
SELECT
*
FROM
x
ORDER BY FIELD(lang, "fr") DESC, id
)
as y
group by externalid我希望查询返回id 2& 3的记录,因此对于每个不同的外部id,如果可能,lang = 'fr',否则任何其他lang。
我该如何解决这个问题?
发布于 2018-01-25 14:47:22
子查询生成传递给外部查询的结果集(虚拟表)。
除非您在ORDER BY子句中完全指定顺序,否则所有SQL查询都会按照不可预知的顺序生成结果。
不可预知就像随机的,除了更糟。随机意味着每次运行查询时都会得到不同的顺序。不可预测意味着每次你都会得到相同的订单,直到你没有。
MySQL通常在子查询中忽略ORDER BY子句(有几个例外,主要与子查询LIMIT子句相关)。将ORDER BY移动到顶级查询。
编辑.您还误用了MySQL对GROUP BY的臭名昭著的非标准扩展。
https://stackoverflow.com/questions/48445480
复制相似问题