MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Corrige “ERRO 1054 (42S22):Coluna desconhecida ‘…’ na ‘cláusula on’ no MariaDB


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;