MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Коригирайте „ГРЕШКА 1054 (42S22):Неизвестна колона „…“ в „on clause“ в MariaDB

Ако получавате грешка, която гласи нещо като „ГРЕШКА 1054 (42S22):Неизвестна колона „tab.ColName“ в „on clause“ ” в MariaDB, ето три вероятни причини:

  • Колоната не съществува.
  • Опитвате се да посочите колона с псевдоним по нейното име.
  • Или може да е обратното. Може да се позовавате на колоната с псевдоним, който никога не е бил деклариран.

Ако колона има псевдоним, тогава трябва да използвате този псевдоним, когато го препращате във всеки ON клауза, когато правите обединяване срещу две или повече таблици. Обратно, ако препращате към колона чрез псевдоним, тогава трябва да се уверите, че псевдонимът действително е деклариран на първо място.

Пример 1

Ето пример за код, който създава грешката:

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

Резултат:

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

Тук случайно използвах c.DogName в ON клауза, когато имах предвид да използвам c.CatName .

В този случай поправката е проста. Използвайте правилното име на колоната:

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

Пример 2

Ето още един пример за код, който създава грешката:

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

Резултат:

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

Тук споменах несъществуващ псевдоним в ON клауза. Използвах c.CatName за справка с CatName колона в Cats маса. Единственият проблем е, че Cats таблицата няма псевдоним.

За да решим този проблем, всичко, което трябва да направим, е да предоставим псевдоним за Cats таблица:

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

Като алтернатива можем да премахнем всички препратки към псевдонима и просто да използваме пълното име на таблицата:

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

Едно нещо, което трябва да отбележа е, че в този пример не сме поставили префикс на имената на колоните в SELECT списък с псевдонима. Ако го бяхме направили, щяхме да видим същата грешка, но с малко по-различно съобщение:

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

Резултат:

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

В този случай той открива неизвестните колони в списъка с полета, преди да намери тази в ON клауза. Така или иначе решението е същото.

Пример 3

Ето още един пример за код, който създава грешката:

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

Резултат:

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

В този случай е деклариран псевдоним за Cats таблица, но не използвах този псевдоним в ON клауза.

Решението тук е да използвате псевдонима вместо името на таблицата:

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. Оптимизация на MySQL Storage Engine:Конфигуриране на InnoDB оптимизация за висока производителност

  2. MariaDB SUBSTR() Обяснено

  3. Как да автоматизирате отказ на база данни с ClusterControl

  4. Въведение в администрирането на MaxScale Използване на maxctrl за MariaDB Cluster

  5. Намерете всички нечислови стойности в колона в MariaDB