ホームページ >データベース >mysql チュートリアル >SQL クエリで「選択リストの列が無効です」エラーが発生するのはなぜですか?
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
を返すかがわかりません。
解決策:
これを修正するには、主に 2 つのオプションがあります:
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 中国語 Web サイトの他の関連記事を参照してください。