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;