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;