MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Correction de "ERREUR 1054 (42S22) :colonne inconnue '...' dans 'on clause' dans MariaDB

Si vous obtenez une erreur qui lit quelque chose comme "ERREUR 1054 (42S22) :colonne inconnue 'tab.ColName' dans 'on clause" ” dans MariaDB, voici trois causes probables :

  • La colonne n'existe pas.
  • Vous essayez de référencer une colonne avec un alias par son nom de colonne.
  • Ou cela pourrait être l'inverse. Vous pouvez faire référence à la colonne avec un alias qui n'a jamais été déclaré.

Si une colonne a un alias, vous devez utiliser cet alias lorsque vous la référencez dans n'importe quel ON clause lors d'une jointure sur deux ou plusieurs tables. Inversement, si vous référencez une colonne par un alias, vous devez vous assurer que l'alias est bien déclaré en premier lieu.

Exemple 1

Voici un exemple de code qui génère l'erreur :

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;

Résultat :

ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'

Ici, j'ai accidentellement utilisé c.DogName dans le ON clause quand je voulais utiliser c.CatName .

Dans ce cas, la solution est simple. Utilisez le nom de colonne correct :

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Exemple 2

Voici un autre exemple de code qui génère l'erreur :

SELECT 
    CatId,
    CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Résultat :

ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'

Ici, j'ai référencé un alias inexistant dans le ON clause. J'ai utilisé c.CatName pour faire référence au CatName colonne dans la colonne Cats table. Le seul problème est que les Cats la table n'a pas d'alias.

Pour résoudre ce problème, tout ce que nous avons à faire est de fournir un alias pour les Cats tableau :

SELECT 
    CatId,
    CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Alternativement, nous pourrions supprimer toutes les références à l'alias et utiliser simplement le nom complet de la table :

SELECT 
    CatId,
    CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;

Une chose que je dois souligner est que, dans cet exemple, nous n'avons pas préfixé les noms de colonne dans le SELECT liste avec l'alias. Si nous avions fait cela, nous aurions vu la même erreur, mais avec un message légèrement différent :

SELECT 
    c.CatId,
    c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Résultat :

ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'

Dans ce cas, il a détecté les colonnes inconnues dans la liste des champs avant de trouver celle dans le ON clause. Dans tous les cas, la solution est la même.

Exemple 3

Voici un autre exemple de code qui génère l'erreur :

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;

Résultat :

ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'

Dans ce cas, un alias a été déclaré pour les Cats table, mais je n'ai pas utilisé cet alias dans le ON clause.

La solution ici est d'utiliser l'alias au lieu du nom de la table :

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;