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
Libérer: 2025-01-23 01:16:08
original
1047 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal