sql >> Base de Datos >  >> RDS >> MariaDB

Arreglar "ERROR 1054 (42S22):Columna desconocida '...' en 'cláusula on' en MariaDB

Si recibe un error que dice algo como "ERROR 1054 (42S22):Columna desconocida 'tab.ColName' en 'cláusula on'" ” en MariaDB, aquí hay tres causas probables:

  • La columna no existe.
  • Está intentando hacer referencia a una columna con alias por su nombre de columna.
  • O podría ser al revés. Podría estar haciendo referencia a la columna con un alias que nunca se declaró.

Si una columna tiene un alias, debe usar ese alias cuando haga referencia a ella en cualquier ON cuando se hace una unión contra dos o más tablas. Por el contrario, si hace referencia a una columna por un alias, entonces debe asegurarse de que el alias esté realmente declarado en primer lugar.

Ejemplo 1

Aquí hay un ejemplo de código que produce el error:

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

Resultado:

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

Aquí usé accidentalmente c.DogName en el ON cláusula cuando quise usar c.CatName .

En este caso, la solución es simple. Utilice el nombre de columna correcto:

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

Ejemplo 2

Aquí hay otro ejemplo de código que produce el error:

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

Resultado:

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

Aquí hice referencia a un alias inexistente en ON cláusula. Usé c.CatName para referirse al CatName columna en Cats mesa. El único problema es que los Cats la tabla no tiene un alias.

Para solucionar este problema, todo lo que tenemos que hacer es proporcionar un alias para los Cats tabla:

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

Alternativamente, podríamos eliminar todas las referencias al alias y simplemente usar el nombre completo de la tabla:

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

Una cosa que debo señalar es que, en este ejemplo, no agregamos un prefijo a los nombres de las columnas en el SELECT lista con el alias. Si hubiéramos hecho eso, habríamos visto el mismo error, pero con un mensaje ligeramente diferente:

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

Resultado:

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

En este caso, detectó las columnas desconocidas en la lista de campos antes de encontrar la que estaba en ON cláusula. De cualquier manera, la solución es la misma.

Ejemplo 3

Aquí hay otro ejemplo de código que produce el error:

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

Resultado:

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

En este caso, se declaró un alias para los Cats tabla, pero no usé ese alias en ON cláusula.

La solución aquí es usar el alias en lugar del nombre de la tabla:

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