Error: Code 1054. Unknown column "U2.id_naslov" in "field list" este aruncată pe această interogare simplă în 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) 

Am căutat și am citit alte postări de pe net, dar nimic nu ajută …

Cred că este o soluție banală dar nu pot să o văd.

Acest tip de eroare nu a apărut niciodată pe TSQL (server sql).

Tabelul krneki_2 a fost creat de Mysql workbench prin import de date (creați un nou tabel) mai târziu, când a apărut această eroare, am modificat și câmpurile numerice în smallint doar pentru a vedea dacă ajută … dar … nimic.

Rezultatul 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) 

Rezultatul 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) 

Rezultate din information_schema, în special din această interogare sugerată în comentarii:

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%" ; 

Rezultate pentru krneki_1 și naslov:

Rezultate pentru krneki_2 și 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) 

Rezultate pentru krneki_2 și 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) 

Mai multe săpături, după cum s-a sugerat:

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" ; 

Rezultate pentru 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) 

Rezultate pentru 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 cu 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 cu 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) 

Răspuns

Mesajul de eroare este destul de clar. Tabelul krneki_2 nu are o coloană numită id_naslov. Cu excepția cazului în care există o corupție în tabelele de sistem sau o eroare, nu există nicio întrebare cu privire la asta.

Deci, trebuie să eliminăm mai multe posibilități de ce apare acest lucru:


  1. Există nepotriviri între instrucțiunile CREATE TABLE și UPDATE:

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

Nepotrivirea este un spațiu la începutul numelor.

Acest lucru ar fi trebuit să dea o eroare „Tabel” krneki_1 „nu există” deci presupunerea mea educată este că aveți două versiuni ale tabelului krneki_1, iar versiunea fără spațiu nu are coloana id_naslov.

Am eliminat această posibilitate, a fost o eroare de copiere și lipire din OP.


  1. Numele coloanei din CREATE TABLE și nu sunt identice. Ele pot arăta la fel, dar pot exista caractere neprimabile sau pot avea caractere Unicode care arată la fel, dar sunt puncte de cod diferite. Pentru a afla, putem folosi această interogare:

    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" ; 

care dezvăluie diferența (nu sunt necesare coloane eliminate din ieșire) :

+------------+-------------+------------------+----+----+ | 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 | +------------+-------------+------------------+----+----+ 

Nota 12 este mai mare decât 10 și există problema! Înseamnă că numele coloanei are 10 caractere și folosește 12 octeți. Aceste numere ar trebui să fie ambele 9 (dacă numărăm id_naslov corect și dacă toate cele 9 caractere erau ASCII), așa că se întâmplă ceva pește acolo.

Puteți adăugați hex(column_name) în lista selectată a acestei ultime interogări și vom ști care este exact numele coloanei. Apoi îl puteți modifica pentru a avea doar caractere ascii tipărite.

Pentru a remedia, aveți nevoie de așa ceva:

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

Răspuns

Problema poate fi că ați uitat să executați o instrucțiune use <database>; și, prin urmare, nu executați inserția în baza de date corectă.

Cu alte cuvinte, s-ar putea să încerce să se insereze într-un tabel care există într-o bază de date diferită, dar cu o structură diferită.

Răspuns

Problema poate avea aliasuri în tabel multiplu UPDATEs și DELETEs. Am găsit cazuri în care AS k2 nu funcționează așa cum ne-am aștepta. Eliminați pseudonimele și pur și simplu utilizați numele tabelelor.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *