SQL「選擇清單中的欄位無效」錯誤解釋
資料庫查詢必須遵循單值規則。 這表示 SELECT
語句中的任何欄位都必須:
GROUP BY
子句中(根據特定列值對行進行分組)。 SUM
、MIN
、MAX
、AVG
、COUNT
等)。 SQL 查詢出現問題:
以下查詢違反了此規則:
<code class="language-sql">select * from Employee as emp full join Location as loc on emp.LocationID = loc.LocationID group by (loc.LocationID)</code>
*
選取所有欄位。 但是,Employee.EmpID
(和其他 Employee
列)既不按 (GROUP BY
) 分組,也不聚合。 由於多個員工可以共用 loc.LocationID
,因此查詢不明確 – 它不知道為每個位置傳回哪個 Employee.EmpID
。
解:
要解決此問題,您有兩個主要選項:
GROUP BY
子句中包含所有非聚合列:<code class="language-sql">select emp.EmpID, loc.LocationID from Employee as emp full join Location as loc on emp.LocationID = loc.LocationID group by emp.EmpID, loc.LocationID</code>
這將按員工 ID 和位置 ID 對結果進行分組,為每個位置的每位員工提供唯一的結果。
<code class="language-sql">select loc.LocationID, count(emp.EmpID) as EmployeeCount from Employee as emp full join Location as loc on emp.LocationID = loc.LocationID group by loc.LocationID</code>
這會計算每個地點的員工數量 (count(emp.EmpID)
)。 其他聚合函數可用於計算總和、平均值或其他統計資料。
透過遵循單值規則,您的 SQL 查詢將產生清晰、明確且可預測的結果。
以上是為什麼我的 SQL 查詢中出現「選擇清單中的列無效」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!