sql >> Databáze >  >> RDS >> MariaDB

Oprava „ERROR 1054 (42S22):Neznámý sloupec „…“ v „klauzuli on“ v MariaDB

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;

  1. Jak nastavit výchozí hodnotu pro existující sloupec

  2. SQL Server:Extrahujte metadata tabulky (popis, pole a jejich datové typy)

  3. Entity Developer a poskytovatelé dat ADO.Net nyní podporují Entity Framework Core 5

  4. Připojení 32bitové aplikace k jBASE