Error: Code 1054. Unknown column "U2.id_naslov" in "field list" bude hozen na tento jednoduchý dotaz v MySQL Workbench :

UPDATE krneki_1 AS U1, krneki_2 AS U2 SET U1.id_naslov = U2.id_naslov WHERE (U2.id_zaposlen = U1.id_naslovi_zaposleni) 

Hledal jsem a četl další příspěvky na internetu, ale nic mi nepomůže …

Myslím, že je to triviální řešení ale já to prostě nevidím.

Tento druh chyby se na TSQL (server sql) nikdy neobjevil.

Tabulka krneki_2 byla vytvořena pracovním prostředím Mysql pomocí importu dat (vytvořit nový tabulka) později, když došlo k této chybě, jsem také změnil počet polí na smallint, abych zjistil, zda to pomáhá … ale … nic.

Výsledek SHOW CREATE TABLE krneki_2:

 Table: krneki_2 Create Table: CREATE TABLE `krneki_2` ( `id` smallint(6) NOT NULL AUTO_INCREMENT, `id_naslov` smallint(6) NOT NULL, `id_zaposlen` smallint(6) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=204 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) 

Výsledek SHOW CREATE TABLE krneki_1:

 Table: krneki_1 Create Table: CREATE TABLE `krneki_1` ( `id_naslovi_zaposleni` smallint(6) NOT NULL AUTO_INCREMENT, `id_naslov` smallint(6) DEFAULT NULL, `id_zaposleni` smallint(6) DEFAULT NULL, `id_aktiven` tinyint(4) DEFAULT "0", `cas_vnosa` datetime DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id_naslovi_zaposleni`) ) ENGINE=InnoDB AUTO_INCREMENT=256 DEFAULT CHARSET=utf8 1 row in set (0.00 sec) 

Výsledky z information_schema, konkrétně z tohoto dotazu navrženého v komentářích:

select table_catalog, table_schema, table_name, column_name, ordinal_position from information_schema.columns where table_name like "%krneki_1%" and column_name like "%naslov%" ; 

Výsledky pro krneki_1 a naslov:

Výsledky pro krneki_2 a naslov:

+---------------+--------------+-------------+--------------+------------------+ | table_catalog | table_schema | table_name | column_name | ordinal_position | +---------------+--------------+-------------+--------------+------------------+ | def | hq_db | krneki_2 | id_naslov | 2 | +---------------+--------------+-------------+--------------+------------------+ 1 row in set (0.00 sec) 

Výsledky pro krneki_2 a zaposlen:

+---------------+--------------+-------------+--------------+------------------+ | table_catalog | table_schema | table_name | column_name | ordinal_position | +---------------+--------------+-------------+--------------+------------------+ | def | hq_db | krneki_2 | id_zaposlen | 3 | +---------------+--------------+-------------+--------------+------------------+ 1 row in set (0.00 sec) 

Další kopání, jak je navrženo:

select table_catalog, table_schema, table_name, column_name, ordinal_position, char_length(column_name) as cl, length(column_name) as l from information_schema.columns where table_name = "krneki_2" ; 

Výsledky pro krneki_2:

+-------------+------------+----------+-----------+----------------+---+---+-------------+ |table_catalog|table_schema|table_name|column_name|ordinal_position| cl| l | column_type | +-------------+------------+----------+-----------+----------------+---+---+-------------+ | def | hq_db | krneki_2 |id | 1 | 2| 2| smallint(6) | | def | hq_db | krneki_2 |id_naslov | 2 | 10| 12| smallint(6) | | def | hq_db | krneki_2 |id_zaposlen| 3 | 11| 11| smallint(6) | +-------------+------------+----------+-----------+----------------+---+---+-------------+ 3 rows in set (0.00 sec) 

Výsledky pro krneki_1:

+-------------+------------+----------+--------------------+----------------+--+--+-----------+ |table_catalog|table_schema|table_name| column_name |ordinal_position|cl| l|column_type| +-------------+------------+----------+--------------------+----------------+--+--+-----------+ | def | hq_db | krneki_1 |id_naslovi_zaposleni| 1 |20|20|smallint(6)| | def | hq_db | krneki_1 |id_naslov | 2 | 9| 9|smallint(6)| | def | hq_db | krneki_1 |id_zaposleni | 3 |12|12|smallint(6)| | def | hq_db | krneki_1 |id_aktiven | 4 |10|10|tinyint(4) | | def | hq_db | krneki_1 |cas_vnosa | 5 | 9| 9|datetime | +-------------+------------+----------+--------------------+----------------+--+--+-----------+ 5 rows in set (0.00 sec) 

krneki_2 s HEX :

+-------------+------------+----------+-----------+----------------+--+--+-------------------------+ |table_catalog|table_schema|table_name|column_name|ordinal_position|cl|l | hex | +-------------+------------+----------+-----------+----------------+--+--+-------------------------+ | def | hq_db | krneki_2 |id | 1 | 2| 2|6964 | | def | hq_db | krneki_2 |id_naslov | 2 |10|12|EFBBBF69645F6E61736C6F76 | | def | hq_db | krneki_2 |id_zaposlen| 3 |11|11|69645F7A61706F736C656E | +-------------+------------+----------+-----------+----------------+--+--+-------------------------+ 3 rows in set (0.00 sec) 

krneki_1 s HEX:

+-------------+------------+----------+--------------------+----------------+--+--+----------------------------------------+ |table_catalog|table_schema|table_name|column_name |ordinal_position|cl| l|hex | +-------------+------------+----------+--------------------+----------------+--+--+----------------------------------------+ | def | hq_db | krneki_1 |id_naslovi_zaposleni| 1 |20|20|69645F6E61736C6F76695F7A61706F736C656E69| | def | hq_db | krneki_1 |id_naslov | 2 | 9| 9|69645F6E61736C6F76 | | def | hq_db | krneki_1 |id_zaposleni | 3 |12|12|69645F7A61706F736C656E69 | | def | hq_db | krneki_1 |id_aktiven | 4 |10|10|69645F616B746976656E | | def | hq_db | krneki_1 |cas_vnosa | 5 | 9| 9|6361735F766E6F7361 | +-------------+------------+----------+--------------------+----------------+--+--+----------------------------------------+ 5 rows in set (0.00 sec) 

odpověď

Chybová zpráva je zcela jasná. Tabulka krneki_2 nemá sloupec s názvem id_naslov. Pokud nedojde k poškození systémových tabulek nebo chybě, není o tom pochyb.

Takže musíme vyloučit několik možností, proč se to objeví:


  1. Mezi prohlášeními CREATE TABLE a UPDATE existují neshody:

    CREATE TABLE ` krneki_1` ... CREATE TABLE ` krneki_2` ... UPDATE krneki_1 AS U1, krneki_2 AS U2 ... 

Neshoda je mezera na začátku jmen.

To by mělo způsobit chybu „Tabulka“ krneki_1 „neexistuje“ , takže můj poučený odhad je, že máte dvě verze tabulky a verze bez mezery nemá sloupec id_naslov.

Tuto možnost jsme vyloučili, byla to chyba kopírování a vložení z OP.


  1. Název sloupce v CREATE TABLE a UPDATE nejsou totožné. Mohou vypadat stejně, ale mohou existovat netisknutelné znaky nebo mohou mít znaky Unicode, které vypadají stejně, ale jsou odlišnými body kódu. Chcete-li to zjistit, můžeme použít tento dotaz:

    select table_catalog, table_schema, table_name, column_name, ordinal_position, char_length(column_name) as cl, length(column_name) as l, hex(column_name) as hex from information_schema.columns where table_name = "krneki_2" ; 

který odhalí rozdíl (není nutné z výstupu odstraňovat sloupce) :

+------------+-------------+------------------+----+----+ | table_name | column_name | ordinal_position | cl | l | +------------+-------------+------------------+----+----+ | krneki_2 | id | 1 | 2 | 2 | | krneki_2 | id_naslov | 2 | 10 | 12 | -- !!! -- | krneki_2 | id_zaposlen | 3 | 11 | 11 | +------------+-------------+------------------+----+----+ 

Poznámka 12 je větší než 10 a je problém! To znamená, že název sloupce má 10 znaků a používá 12 bajtů. Tato čísla by měla být 9 (pokud počítáme id_naslov správně a pokud všech 9 znaků bylo ASCII), takže se tam něco děje.

Můžete přidejte hex(column_name) do seznamu pro výběr tohoto posledního dotazu a my víme, jaký je přesně název sloupce. Poté jej můžete změnit tak, aby měl pouze tisknutelné znaky ascii.

K opravě potřebujete něco takového:

set @column := X"EFBBBF69645F6E61736C6F76" ; set @qry:= concat("alter table krneki_2 change column ", @column, " id_naslov smallint") ; prepare stmt from @qry ; execute stmt ; 

Odpovědět

Problém může být v tom, že jste zapomněli provést příkaz use <database>; a následně jste vložku neprovedli ve správné databázi.

Jinými slovy, se může pokoušet vložit do tabulky, která existuje v jiné databázi, ale s jinou strukturou.

Odpověď

Problém může být s aliasy ve více tabulkách UPDATEs a DELETEs. Našel jsem případy, kdy AS k2 nefunguje tak, jak by se dalo očekávat. Odeberte aliasy a jednoduše použijte názvy tabulek.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *