首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

SQL 中 WHERE 與 HAVING 子句順序錯誤導致查詢失敗的解決方案

     編輯:程式設計疑難解答

錯誤 SQL 示例

SELECT p.rfid, SUM(d.intake) AS amount
FROM pig_basic p LEFT JOIN daily_food_intake d ON p.rfid = d.rfid
GROUP BY p.rfid
ORDER BY p.rowid
WHERE amount = 0;  -- 錯誤位置

錯誤原因

SQL 執行順序為:FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY。
WHERE 不能使用聚合函數結果(如 SUM())或列別名(amount),且必須寫在 GROUP BY 之前。
HAVING 專門用於過濾分組後的聚合結果,但不能使用 SELECT 列別名,需重寫聚合表達式。

正確寫法

SELECT p.rfid, SUM(d.intake) AS amount
FROM pig_basic p
LEFT JOIN daily_food_intake d ON p.rfid = d.rfid
GROUP BY p.rfid
HAVING SUM(d.intake) = 0   -- 使用聚合表達式,不可用 amount
ORDER BY p.rowid;

核心口訣

  • WHERE:過濾原始行,寫在 GROUP BY 前,不可用聚合/別名。
  • HAVING:過濾分組結果,寫在 GROUP BY 後,可用聚合,不可用別名。
  • ORDER BY:最後執行,可用別名。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved