ホームページ >データベース >mysql チュートリアル >SQL クエリで「選択リストの列が無効です」エラーが発生するのはなぜですか?

SQL クエリで「選択リストの列が無効です」エラーが発生するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-23 01:16:081045ブラウズ

Why am I Getting a

SQL「選択リスト内の列が無効です」エラーの説明

データベースクエリは単一値ルールに従う必要があります。 これは、SELECT ステートメント内の列は次のいずれかでなければならないことを意味します:

  1. GROUP BY 句に含めます (特定の列の値に基づいて行をグループ化します)。
  2. 集計関数 (SUMMINMAXAVGCOUNT など) 内で使用されます。

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 つのオプションがあります:

  1. すべての非集計列を 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 の両方でグループ化され、各場所の各従業員に一意の結果が提供されます。

  1. グループ化されていない列には集計関数を使用します:
<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。