Error: Code 1054. Unknown column "U2.id_naslov" in "field list" viene generata su questa semplice query in 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) 

Ho cercato e letto altri post in rete ma niente aiuta …

Immagino sia “una soluzione banale ma non riesco a vederlo.

Questo tipo di errore non si è mai verificato su TSQL (server sql).

La tabella krneki_2 è stata creata da Mysql workbench tramite importazione dati (crea nuovo table) in seguito, quando si è verificato questo errore, ho anche modificato i campi numerici in smallint solo per vedere se aiuta … ma … niente.

Risultato di 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) 

Risultato di 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) 

Risultati da information_schema, in particolare da questa query suggerita nei commenti:

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

Risultati per krneki_1 e naslov:

Risultati per krneki_2 e 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) 

Risultati per krneki_2 e 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) 

Ulteriori approfondimenti, come suggerito:

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

Risultati per 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) 

Risultati per 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 con 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 con 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) 

Risposta

Il messaggio di errore è abbastanza chiaro. La tabella krneki_2 non ha una colonna denominata id_naslov. A meno che non ci sia qualche danneggiamento nelle tabelle di sistema o un bug, non ci sono dubbi al riguardo.

Quindi dobbiamo eliminare diverse possibilità per cui questo appare:


  1. Sono presenti discrepanze tra le istruzioni CREATE TABLE e UPDATE:

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

La mancata corrispondenza è uno spazio allinizio dei nomi.

Questo dovrebbe aver dato un errore di “La tabella” krneki_1 “non” esiste “ quindi la mia ipotesi plausibile è che tu abbia due versioni della tabella krneki_1 e la versione senza spazio” t non ha la colonna id_naslov.

Abbiamo eliminato questa possibilità, si trattava di un errore di copia incolla dallOP.


  1. Il nome della colonna in CREATE TABLE e UPDATE non sono identici. Possono avere lo stesso aspetto ma potrebbero essere presenti caratteri non stampabili o potrebbero avere caratteri Unicode che hanno lo stesso aspetto ma sono punti di codice diversi. Per scoprirlo, possiamo usare questa query:

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

che rivela la differenza (colonne non necessarie rimosse dalloutput) :

+------------+-------------+------------------+----+----+ | 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 è più grande di 10 e cè il problema! Significa che il nome della colonna ha 10 caratteri e utilizza 12 byte. Questi numeri dovrebbero essere entrambi 9 (se contiamo id_naslov correttamente e se tutti i 9 caratteri fossero ASCII), quindi sta succedendo qualcosa di strano.

Puoi aggiungi hex(column_name) nellelenco di selezione di questultima query e sapremo qual è esattamente il nome della colonna. Quindi puoi modificarlo per avere solo caratteri ASCII stampabili.

Per risolvere il problema, è necessario qualcosa del genere:

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

Risposta

Il problema potrebbe essere che ti sei dimenticato di eseguire unistruzione use <database>; e, di conseguenza, non stavi “eseguendo linserimento nel database corretto.

In altre parole, tu potrebbe tentare di inserire in una tabella che esiste in un database diverso, ma con una struttura diversa.

Risposta

Il problema può essere con alias in più tabelle UPDATEs e DELETEs. Ho trovato casi in cui AS k2 non funziona come ci si aspetterebbe. Rimuovi gli alias e utilizza semplicemente i nomi delle tabelle.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *