Maison >base de données >tutoriel mysql >Pourquoi est-ce que je reçois une erreur « La colonne n'est pas valide dans la liste de sélection » dans ma requête SQL ?

Pourquoi est-ce que je reçois une erreur « La colonne n'est pas valide dans la liste de sélection » dans ma requête SQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-23 01:16:081053parcourir

Why am I Getting a

SQL "La colonne n'est pas valide dans la liste de sélection" Erreur expliquée

Les requêtes de base de données doivent suivre la règle de la valeur unique. Cela signifie que toute colonne de votre SELECT déclaration doit soit :

  1. Être inclus dans la clause GROUP BY (regroupant les lignes en fonction de valeurs de colonne spécifiques).
  2. Être utilisé dans une fonction d'agrégation (comme SUM, MIN, MAX, AVG, COUNT, etc.).

Problème avec la requête SQL :

La requête suivante viole cette règle :

<code class="language-sql">select *
from Employee as emp full join Location as loc
on emp.LocationID = loc.LocationID
group by (loc.LocationID)</code>

Le * sélectionne toutes les colonnes. Cependant, Employee.EmpID (et les autres colonnes Employee) ne sont ni regroupées par (GROUP BY) ni agrégées. Étant donné que plusieurs employés peuvent partager un loc.LocationID, la requête est ambiguë : elle ne sait pas quel Employee.EmpID renvoyer pour chaque emplacement.

Solutions :

Pour résoudre ce problème, vous avez deux options principales :

  1. Inclure toutes les colonnes non agrégées dans la clause 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>

Cela regroupe les résultats par identifiant d'employé et par identifiant d'emplacement, fournissant un résultat unique pour chaque employé sur chaque emplacement.

  1. Utiliser les fonctions d'agrégation pour les colonnes non groupées :
<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>

Cela compte le nombre d'employés (count(emp.EmpID)) sur chaque site. D'autres fonctions d'agrégation pourraient être utilisées pour calculer des sommes, des moyennes ou d'autres statistiques.

En suivant la règle de la valeur unique, vos requêtes SQL produiront des résultats clairs, sans ambiguïté et prévisibles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn