Hvis du får en fejl, der lyder noget som "FEJL 1054 (42S22):Ukendt kolonne 'tab.ColName' i 'on-klausul' ” i MariaDB er her tre sandsynlige årsager:
- Kolonnen eksisterer ikke.
- Du forsøger at henvise til en kolonne med alias ved dens kolonnenavn.
- Eller det kan være omvendt. Du kan referere til kolonnen med et alias, der aldrig blev erklæret.
Hvis en kolonne har et alias, skal du bruge dette alias, når du refererer til det i en hvilken som helst ON
klausul, når du laver en join mod to eller flere borde. Omvendt, hvis du refererer til en kolonne ved hjælp af et alias, skal du sikre dig, at aliaset faktisk er deklareret i første omgang.
Eksempel 1
Her er et eksempel på kode, der producerer fejlen:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;
Resultat:
ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'
Her brugte jeg ved et uheld c.DogName
i ON
klausul, da jeg ville bruge c.CatName
.
I dette tilfælde er rettelsen enkel. Brug det korrekte kolonnenavn:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Eksempel 2
Her er et andet eksempel på kode, der producerer fejlen:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Resultat:
ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'
Her refererede jeg til et ikke-eksisterende alias i ON
klausul. Jeg brugte c.CatName
for at henvise til CatName
kolonnen i Cats
bord. Det eneste problem er, at Cats
tabel har ikke et alias.
For at løse dette problem er alt, hvad vi skal gøre, at angive et alias for Cats
tabel:
SELECT
CatId,
CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Alternativt kunne vi fjerne alle referencer til aliaset og blot bruge det fulde tabelnavn:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;
En ting jeg bør påpege er, at vi i dette eksempel ikke præfiksede kolonnenavnene i SELECT
liste med alias. Hvis vi havde gjort det, ville vi have set den samme fejl, men med en lidt anden besked:
SELECT
c.CatId,
c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Resultat:
ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'
I dette tilfælde opdagede den de ukendte kolonner i feltlisten, før den fandt den i ON
klausul. Uanset hvad, er løsningen den samme.
Eksempel 3
Her er et andet eksempel på kode, der producerer fejlen:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
Resultat:
ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'
I dette tilfælde blev der erklæret et alias for Cats
tabel, men jeg brugte ikke det alias i ON
klausul.
Løsningen her er at bruge aliaset i stedet for tabelnavnet:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;