SELECT id, a FROM test ORDER BY a ASC LIMIT 1
SELECT id, a, COUNT(*) FROM test ORDER BY a ASC LIMIT 1
为什么会这样?什么是替代方案?
答案 0 :(得分:3)
尝试
SELECT id, a,
(SELECT COUNT(*) FROM test) as cnt
FROM test
ORDER BY a ASC LIMIT 1
它应该给出预期的结果。即使我非常确定优化器只会执行一次子查询,但使用EXPLAIN
检查执行计划总是有意义的。
答案 1 :(得分:0)
在查询中使用聚合函数时,不能在sql中选择任何其他属性,除非并且直到在“GROUP BY”子句中使用other属性。所以解决它可能是
SELECT id,a,t.cnt
FROM (SELECT count(*) as cnt FROM test) as t, test
ORDER BY a LIMIT 1;
答案 2 :(得分:0)
DBMS正在执行以下操作,因为缺少id
和a
的聚合,它会选择它想要的任何值。
SELECT id, a, COUNT(*) FROM (
SELECT 1 AS dummy, id, a FROM test
) t
GROUP BY dummy
ORDER BY a ASC LIMIT 1
在其他DBMS中,您可以使用WITH
,因此您不必重写where子句(在MySQL中,您只能创建一个视图来模拟这个)。有关正确的查询,请参阅@ a1ex07的答案。