為什么mysql having的條件表達式可以直接使用select后的別名?


SQL語句的語法順序:

FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> UNION -> ORDER BY

因此一般不能在having condition中使用select list中的alias。

但是mysql對此作了擴展。在mysql 5.7.5之前的版本,ONLY_FULL_GROUP_BY sql mode默認不開啟。在5.7.5或之后的版本默認開啟。

如果ONLY_FULL_GROUP_BY sql mode不開啟,那么mysql對標准SQL的擴展可以生效:

  1. 允許在select list、having condition和order by list中使用沒有出現在group by list中的字段。此時mysql會隨機選擇沒有出現在group by list中的字段的值。效果和使用ANY_VALUE()是相同的。
  2. 允許在having condition中使用select list中的alias


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM