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;