Als u een foutmelding krijgt met de tekst 'ERROR 1054 (42S22):Onbekende kolom 'tab.ColName' in 'on-clausule' ” in MariaDB, hier zijn drie waarschijnlijke oorzaken:
- De kolom bestaat niet.
- U probeert te verwijzen naar een gealiaste kolom met de kolomnaam.
- Of het kan andersom zijn. Je zou kunnen verwijzen naar de kolom met een alias die nooit is gedeclareerd.
Als een kolom een alias heeft, moet u die alias gebruiken wanneer u ernaar verwijst in een ON
clausule bij het doen van een join tegen twee of meer tabellen. Omgekeerd, als u met een alias naar een kolom verwijst, moet u ervoor zorgen dat de alias in de eerste plaats wordt gedeclareerd.
Voorbeeld 1
Hier is een voorbeeld van code die de fout veroorzaakt:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;
Resultaat:
ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'
Hier gebruikte ik per ongeluk c.DogName
in de ON
clausule toen ik c.CatName
wilde gebruiken .
In dit geval is de oplossing eenvoudig. Gebruik de juiste kolomnaam:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Voorbeeld 2
Hier is nog een voorbeeld van code die de fout veroorzaakt:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Resultaat:
ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'
Hier verwees ik naar een niet-bestaande alias in de ON
clausule. Ik gebruikte c.CatName
om te verwijzen naar de CatName
kolom in de Cats
tafel. Het enige probleem is dat de Cats
tabel heeft geen alias.
Om dit probleem op te lossen, hoeven we alleen maar een alias op te geven voor de Cats
tafel:
SELECT
CatId,
CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Als alternatief kunnen we alle verwijzingen naar de alias verwijderen en gewoon de volledige tabelnaam gebruiken:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;
Een ding waar ik op moet wijzen, is dat we in dit voorbeeld geen voorvoegsel hebben gegeven aan de kolomnamen in de SELECT
lijst met de alias. Als we dat hadden gedaan, hadden we dezelfde fout gezien, maar met een iets andere melding:
SELECT
c.CatId,
c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Resultaat:
ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'
In dit geval detecteerde het de onbekende kolommen in de lijst met velden voordat het die in de ON
. vond clausule. Hoe dan ook, de oplossing is hetzelfde.
Voorbeeld 3
Hier is nog een voorbeeld van code die de fout veroorzaakt:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
Resultaat:
ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'
In dit geval is er een alias gedeclareerd voor de Cats
tabel, maar ik heb die alias niet gebruikt in de ON
clausule.
De oplossing hier is om de alias te gebruiken in plaats van de tabelnaam:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;