sql >> Database >  >> RDS >> MariaDB

Fix "ERROR 1054 (42S22):Onbekende kolom '...' in 'on-clausule' in MariaDB

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;

  1. MySQL versus MariaDB

  2. Zijn er beveiligingsrisico's verbonden aan Spotlight Cloud Monitoring?

  3. SQL Server Agent-taken lokaliseren in Azure Data Studio

  4. ActiveAndroid Pre-tabel vullen met schemamigratie