SELECT * FROM t HAVING id = MIN(id); -- 返回 id=1 SELECT * FROM t HAVING id = MAX(id); -- 空結果
HAVING 重寫為 GROUP BY NULL HAVING ...GROUP BY NULL 產生單一分組,**只包含第一行數據**(等價 LIMIT 1)MIN()/MAX() 計算的是**全表**值,非分組內值-- 資料:(a=10,id=1), (a=1,id=3) SELECT * FROM t2 GROUP BY NULL; -- 只返回第一行 (10,1) SELECT MAX(a),MIN(a),MAX(id),MIN(id) FROM t2 GROUP BY NULL; -- 結果:MAX(a)=10, MIN(a)=1, MAX(id)=3, MIN(id)=1 ← 全表聚合! -- 對比正常 GROUP BY a SELECT MAX(a),MIN(a) FROM t2 GROUP BY a; -- 每組各 1 行,MAX=MIN
HAVING id=MIN(id) 實際等價 HAVING id=1 → 命中第一行HAVING id=MAX(id) 實際等價 HAVING id=3 → 第一行 id=1 不匹配 → 空結果❌ 別用無 GROUP BY 的 HAVING 玩花樣
✅ 規範寫法:SELECT * FROM t ORDER BY id LIMIT 1;(取最小)
✅ 規範寫法:SELECT * FROM t ORDER BY id DESC LIMIT 1;(取最大)