sql >> Databasteknik >  >> RDS >> MariaDB

Fixa "ERROR 1054 (42S22):Okänd kolumn "..." i "on-sats" i MariaDB

Om du får ett felmeddelande som lyder något i stil med "ERROR 1054 (42S22):Okänd kolumn "tab.ColName" i "on-sats" ” i MariaDB, här är tre troliga orsaker:

  • Kolumnen finns inte.
  • Du försöker referera till en aliaskolumn med kolumnnamnet.
  • Eller så kan det vara tvärtom. Du kan referera till kolumnen med ett alias som aldrig deklarerades.

Om en kolumn har ett alias måste du använda det aliaset när du refererar till det i någon ON klausul när man gör en join mot två eller flera bord. Omvänt, om du refererar till en kolumn med ett alias, måste du se till att aliaset faktiskt deklareras i första hand.

Exempel 1

Här är ett exempel på kod som ger felet:

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'

Här använde jag av misstag c.DogName i ON klausul när jag menade att använda c.CatName .

I det här fallet är korrigeringen enkel. Använd rätt kolumnnamn:

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Exempel 2

Här är ett annat exempel på kod som ger felet:

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'

Här refererade jag till ett icke-existerande alias i ON klausul. Jag använde c.CatName för att hänvisa till CatName kolumnen i Cats tabell. Det enda problemet är att Cats tabellen har inget alias.

För att åtgärda det här problemet behöver vi bara tillhandahålla ett alias för Cats tabell:

SELECT 
    CatId,
    CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

Alternativt kan vi ta bort alla referenser till aliaset och bara använda det fullständiga tabellnamnet:

SELECT 
    CatId,
    CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;

En sak jag bör påpeka är att vi i det här exemplet inte prefixade kolumnnamnen i SELECT lista med aliaset. Om vi ​​hade gjort det skulle vi ha sett samma fel, men med ett lite annorlunda meddelande:

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 det här fallet upptäckte den de okända kolumnerna i fältlistan innan den hittade den i ON klausul. Oavsett vilket är lösningen densamma.

Exempel 3

Här är ett annat exempel på kod som ger felet:

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 det här fallet deklarerades ett alias för Cats tabellen, men jag använde inte det aliaset i ON klausul.

Lösningen här är att använda aliaset istället för tabellnamnet:

SELECT 
    c.CatId,
    c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;

  1. Oracle:Uppdatering av en tabellkolumn med ROWNUM i kombination med ORDER BY-satsen

  2. 50 Shades of NULL – De olika betydelserna av NULL i SQL

  3. Söka Microsoft Access-data med Elasticsearch

  4. I Oracle AS fungerar inte aliaset