Se você está recebendo um erro que diz algo como "ERRO 1054 (42S22):Coluna desconhecida 'tab.ColName' na cláusula 'on" ” no MariaDB, aqui estão três causas prováveis:
- A coluna não existe.
- Você está tentando fazer referência a uma coluna com alias pelo nome da coluna.
- Ou pode ser o contrário. Você pode estar referenciando a coluna com um alias que nunca foi declarado.
Se uma coluna tiver um alias, você deverá usar esse alias ao fazer referência a ela em qualquer
ON
cláusula ao fazer uma junção em duas ou mais tabelas. Por outro lado, se você fizer referência a uma coluna por um alias, precisará garantir que o alias seja realmente declarado em primeiro lugar. Exemplo 1
Aqui está um exemplo de código que produz o erro:
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'
Aqui eu acidentalmente usei
c.DogName
no ON
cláusula quando eu pretendia usar c.CatName
. Nesse caso, a correção é simples. Use o nome de coluna correto:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Exemplo 2
Aqui está outro exemplo de código que produz o erro:
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'
Aqui eu referi um alias inexistente no
ON
cláusula. Eu usei c.CatName
para se referir ao CatName
coluna na coluna Cats
tabela. O único problema é que os Cats
tabela não tem um alias. Para corrigir esse problema, tudo o que precisamos fazer é fornecer um alias para o
Cats
tabela:SELECT
CatId,
CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Como alternativa, poderíamos remover todas as referências ao alias e usar apenas o nome completo da tabela:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;
Uma coisa que devo salientar é que, neste exemplo, não prefixamos os nomes das colunas no
SELECT
lista com o alias. Se tivéssemos feito isso, teríamos visto o mesmo erro, mas com uma mensagem ligeiramente 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'
Nesse caso, ele detectou as colunas desconhecidas na lista de campos antes de encontrar a coluna
ON
cláusula. De qualquer forma, a solução é a mesma. Exemplo 3
Aqui está outro exemplo de código que produz o erro:
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'
Neste caso, um alias foi declarado para o
Cats
tabela, mas não usei esse alias no ON
cláusula. A solução aqui é usar o alias em vez do nome da tabela:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;