MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Napraw „BŁĄD 1054 (42S22):Nieznana kolumna „…” w „klauzula” w MariaDB

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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to jest MariaDB? Jak działa MariaDB?

  2. MariaDB JSON_CONTAINS_PATH () Wyjaśnione

  3. 2 sposoby na uzyskanie zestawów znaków dostępnych w MariaDB

  4. Funkcja SUM() w MariaDB

  5. Jednostki daty i czasu MariaDB