sql >> Database teknologi >  >> RDS >> MariaDB

Ret "FEJL 1054 (42S22):Ukendt kolonne "..." i "on-klausul" i MariaDB

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;

  1. Sorter efter kolonne ASC, men NULL-værdier først?

  2. VÆLG FOR XML AUTO og returner datatyper

  3. Sådan bruges ALL Logical Operator i SQL Server - SQL Server / TSQL Tutorial Del 126

  4. Asynkron replikering automatisk failover i MySQL 8.0.22