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;