MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Behebung von „ERROR 1054 (42S22):Unbekannte Spalte ‚…‘ in ‚on-Klausel‘ in MariaDB

Wenn Sie eine Fehlermeldung wie „FEHLER 1054 (42S22):Unbekannte Spalte ‚tab.ColName‘ in ‚on-Klausel‘“ erhalten ” in MariaDB gibt es drei wahrscheinliche Ursachen:

  • Die Spalte existiert nicht.
  • Sie versuchen, eine Alias-Spalte anhand ihres Spaltennamens zu referenzieren.
  • Oder es könnte umgekehrt sein. Möglicherweise verweisen Sie auf die Spalte mit einem Alias, der nie deklariert wurde.

Wenn eine Spalte einen Alias ​​hat, müssen Sie diesen Alias ​​verwenden, wenn Sie in einem beliebigen ON darauf verweisen -Klausel, wenn ein Join mit zwei oder mehr Tabellen durchgeführt wird. Wenn Sie umgekehrt eine Spalte mit einem Alias ​​referenzieren, müssen Sie sicherstellen, dass der Alias ​​tatsächlich überhaupt deklariert ist.

Beispiel 1

Hier ist ein Codebeispiel, das den Fehler erzeugt:

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

Ergebnis:

ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'

Hier habe ich versehentlich c.DogName verwendet im ON -Klausel, wenn ich c.CatName verwenden wollte .

In diesem Fall ist die Lösung einfach. Verwenden Sie den richtigen Spaltennamen:

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

Beispiel 2

Hier ist ein weiteres Codebeispiel, das den Fehler erzeugt:

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

Ergebnis:

ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'

Hier habe ich auf einen nicht existierenden Alias ​​im ON verwiesen Klausel. Ich habe c.CatName verwendet um auf den CatName zu verweisen Spalte in der Cats Tisch. Das einzige Problem ist, dass die Cats Tabelle hat keinen Alias.

Um dieses Problem zu beheben, müssen wir lediglich einen Alias ​​für die Cats bereitstellen Tabelle:

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

Alternativ könnten wir alle Verweise auf den Alias ​​entfernen und einfach den vollständigen Tabellennamen verwenden:

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

Eine Sache, auf die ich hinweisen sollte, ist, dass wir in diesem Beispiel den Spaltennamen in SELECT kein Präfix vorangestellt haben Liste mit dem Alias. Wenn wir das getan hätten, hätten wir denselben Fehler gesehen, aber mit einer etwas anderen Meldung:

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

Ergebnis:

ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'

In diesem Fall hat es die unbekannten Spalten in der Feldliste erkannt, bevor es diejenige in ON gefunden hat Klausel. In jedem Fall ist die Lösung dieselbe.

Beispiel 3

Hier ist ein weiteres Codebeispiel, das den Fehler erzeugt:

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

Ergebnis:

ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'

In diesem Fall wurde für die Cats ein Alias ​​deklariert Tabelle, aber ich habe diesen Alias ​​nicht in ON verwendet Klausel.

Die Lösung hier ist, den Alias ​​anstelle des Tabellennamens zu verwenden:

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