MariaDB
 sql >> Database >  >> RDS >> MariaDB

Correzione di "ERRORE 1054 (42S22):colonna sconosciuta '...' in 'clausola on" in MariaDB

Se ricevi un messaggio di errore simile a "ERRORE 1054 (42S22):colonna sconosciuta"tab.ColName" in "clausola on" ” in MariaDB, ecco tre probabili cause:

  • La colonna non esiste.
  • Stai cercando di fare riferimento a una colonna con alias in base al nome della colonna.
  • Oppure potrebbe essere il contrario. Potresti fare riferimento alla colonna con un alias che non è mai stato dichiarato.

Se una colonna ha un alias, devi usare quell'alias quando ci si fa riferimento in qualsiasi ON clausola quando si esegue un join su due o più tabelle. Al contrario, se fai riferimento a una colonna con un alias, devi prima assicurarti che l'alias sia effettivamente dichiarato.

Esempio 1

Ecco un esempio di codice che produce l'errore:

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

Risultato:

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

Qui ho usato accidentalmente c.DogName nel ON clausola quando intendevo usare c.CatName .

In questo caso, la soluzione è semplice. Usa il nome della colonna corretto:

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

Esempio 2

Ecco un altro esempio di codice che produce l'errore:

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

Risultato:

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

Qui ho fatto riferimento a un alias inesistente in ON clausola. Ho usato c.CatName per fare riferimento a CatName colonna nella Cats tavolo. L'unico problema è che i Cats la tabella non ha un alias.

Per risolvere questo problema, tutto ciò che dobbiamo fare è fornire un alias per i Cats tabella:

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

In alternativa, potremmo rimuovere tutti i riferimenti all'alias e utilizzare semplicemente il nome completo della tabella:

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

Una cosa che dovrei sottolineare è che, in questo esempio non abbiamo prefissato i nomi delle colonne in SELECT elenco con l'alias. Se lo avessimo fatto, avremmo visto lo stesso errore, ma con un messaggio leggermente diverso:

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

Risultato:

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

In questo caso, ha rilevato le colonne sconosciute nell'elenco dei campi prima di trovare quella nel ON clausola. In ogni caso, la soluzione è la stessa.

Esempio 3

Ecco un altro esempio di codice che produce l'errore:

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

Risultato:

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

In questo caso, è stato dichiarato un alias per i Cats tabella, ma non ho usato quell'alias in ON clausola.

La soluzione qui è usare l'alias invece del nome della tabella:

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