Jeśli otrzymujesz błąd, który brzmi mniej więcej tak:„BŁĄD 1054 (42S22):Nieznana kolumna „tab.ColName” w klauzuli „on” ” w MariaDB są trzy prawdopodobne przyczyny:
- Kolumna nie istnieje.
- Próbujesz odwołać się do kolumny z aliasem według jej nazwy.
- Albo może być odwrotnie. Możesz odwoływać się do kolumny za pomocą aliasu, który nigdy nie został zadeklarowany.
Jeśli kolumna ma alias, musisz użyć tego aliasu podczas odwoływania się do niej w dowolnym ON
klauzula podczas łączenia dwóch lub więcej tabel. I odwrotnie, jeśli odwołujesz się do kolumny przez alias, musisz najpierw upewnić się, że alias jest faktycznie zadeklarowany.
Przykład 1
Oto przykład kodu, który generuje błąd:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;
Wynik:
ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'
Tutaj przypadkowo użyłem c.DogName
w ON
klauzula, kiedy chciałem użyć c.CatName
.
W tym przypadku poprawka jest prosta. Użyj prawidłowej nazwy kolumny:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Przykład 2
Oto kolejny przykład kodu, który powoduje błąd:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Wynik:
ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'
Tutaj odniosłem się do nieistniejącego aliasu w ON
klauzula. Użyłem c.CatName
aby odnieść się do CatName
kolumna w Cats
stół. Jedynym problemem jest to, że Cats
tabela nie ma aliasu.
Aby rozwiązać ten problem, wystarczy podać alias dla Cats
tabela:
SELECT
CatId,
CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Alternatywnie możemy usunąć wszystkie odniesienia do aliasu i po prostu użyć pełnej nazwy tabeli:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;
Jedną rzeczą, na którą powinienem zwrócić uwagę, jest to, że w tym przykładzie nie poprzedziliśmy nazw kolumn w SELECT
lista z aliasem. Gdybyśmy to zrobili, zobaczylibyśmy ten sam błąd, ale z nieco innym komunikatem:
SELECT
c.CatId,
c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Wynik:
ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'
W tym przypadku wykrył nieznane kolumny na liście pól, zanim znalazł tę w ON
klauzula. Tak czy inaczej, rozwiązanie jest takie samo.
Przykład 3
Oto kolejny przykład kodu, który powoduje błąd:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
Wynik:
ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'
W tym przypadku zadeklarowano alias dla Cats
tabeli, ale nie użyłem tego aliasu w ON
klauzula.
Rozwiązaniem tutaj jest użycie aliasu zamiast nazwy tabeli:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;