Pokud se vám zobrazuje chyba, která zní něco jako „ERROR 1054 (42S22):Neznámý sloupec ‚tab.ColName‘ v ‚on clause‘ ” v MariaDB, zde jsou tři pravděpodobné příčiny:
- Sloupec neexistuje.
- Pokoušíte se odkazovat na aliasový sloupec jeho názvem.
- Nebo to může být naopak. Můžete odkazovat na sloupec s aliasem, který nebyl nikdy deklarován.
Pokud má sloupec alias, musíte tento alias použít, když na něj odkazujete v libovolném ON
klauzule při spojování dvou nebo více tabulek. Naopak, pokud odkazujete na sloupec aliasem, musíte zajistit, aby byl alias skutečně deklarován na prvním místě.
Příklad 1
Zde je příklad kódu, který způsobuje chybu:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.DogName = d.DogName;
Výsledek:
ERROR 1054 (42S22): Unknown column 'c.DogName' in 'on clause'
Zde jsem omylem použil c.DogName
v ON
klauzule, když jsem chtěl použít c.CatName
.
V tomto případě je oprava jednoduchá. Použijte správný název sloupce:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Příklad 2
Zde je další příklad kódu, který způsobuje chybu:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Výsledek:
ERROR 1054 (42S22): Unknown column 'c.CatName' in 'on clause'
Zde jsem odkazoval na neexistující alias v ON
doložka. Použil jsem c.CatName
odkazovat na CatName
ve sloupci Cats
stůl. Jediný problém je, že Cats
tabulka nemá alias.
Chcete-li tento problém vyřešit, vše, co musíme udělat, je poskytnout alias pro Cats
tabulka:
SELECT
CatId,
CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Případně bychom mohli odstranit všechny odkazy na alias a použít pouze celý název tabulky:
SELECT
CatId,
CatName
FROM Cats
INNER JOIN Dogs
ON Cats.CatName = Dogs.DogName;
Jedna věc, kterou bych měl zdůraznit, je, že v tomto příkladu jsme v SELECT
nenapsali před názvy sloupců seznam s aliasem. Pokud bychom to udělali, viděli bychom stejnou chybu, ale s trochu jinou zprávou:
SELECT
c.CatId,
c.CatName
FROM Cats
INNER JOIN Dogs d
ON c.CatName = d.DogName;
Výsledek:
ERROR 1054 (42S22): Unknown column 'c.CatId' in 'field list'
V tomto případě detekoval neznámé sloupce v seznamu polí dříve, než našel ten v ON
doložka. V každém případě je řešení stejné.
Příklad 3
Zde je další příklad kódu, který způsobuje chybu:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON Cats.CatName = d.DogName;
Výsledek:
ERROR 1054 (42S22): Unknown column 'Cats.CatName' in 'on clause'
V tomto případě byl deklarován alias pro Cats
tabulce, ale nepoužil jsem tento alias v ON
doložka.
Řešením je použít alias místo názvu tabulky:
SELECT
c.CatId,
c.CatName
FROM Cats c
INNER JOIN Dogs d
ON c.CatName = d.DogName;