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

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

Barbara Streisand
リリース: 2025-01-23 01:16:08
オリジナル
1079 人が閲覧しました

Why am I Getting a

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

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

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

SQL クエリの問題:

次のクエリはこのルールに違反しています:

select *
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by (loc.LocationID)
ログイン後にコピー

* はすべての列を選択します。 ただし、Employee.EmpID (および他の Employee 列) は (GROUP BY) によってグループ化も集計もされません。 複数の従業員が loc.LocationID を共有できるため、クエリは曖昧です。場所ごとにどの Employee.EmpID を返すかがわかりません。

解決策:

これを修正するには、主に 2 つのオプションがあります:

  1. すべての非集計列を GROUP BY 句に含めます:
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
ログイン後にコピー

これにより、結果が従業員 ID と場所 ID の両方でグループ化され、各場所の各従業員に一意の結果が提供されます。

  1. グループ化されていない列には集計関数を使用します:
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
ログイン後にコピー

これは、各拠点の従業員 (count(emp.EmpID)) の数をカウントします。 他の集計関数を使用して、合計、平均、またはその他の統計を計算することもできます。

単一値ルールに従うことで、SQL クエリは明確で、明確で、予測可能な結果を​​生成します。

以上がSQL クエリで「選択リストの列が無効です」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート