Error: Code 1054. Unknown column "U2.id_naslov" in "field list" wordt gegenereerd op deze simpele 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) 

Ik heb andere berichten op het net gezocht en gelezen, maar niets helpt …

Ik denk dat het een triviale oplossing is maar ik kan het gewoon “niet zien.

Dit soort fout kwam nooit voor op TSQL (sql-server).

Tabel krneki_2 is gemaakt door Mysql-werkbank via gegevensimport (maak nieuwe table) later, toen deze fout optrad, veranderde ik ook de numerieke velden in smallint om te zien of het helpt … maar … niets.

Resultaat van 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) 

Resultaat van 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) 

Resultaten van information_schema, specifiek van deze vraag voorgesteld in opmerkingen:

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

Resultaten voor krneki_1 en naslov:

Resultaten voor krneki_2 en 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) 

Resultaten voor krneki_2 en 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) 

Verder graven, zoals voorgesteld:

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

Resultaten voor 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) 

Resultaten voor 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 met 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 met 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) 

Antwoord

De foutmelding is vrij duidelijk. De tabel krneki_2 heeft geen kolom met de naam id_naslov. Tenzij er enige corruptie in systeemtabellen of een bug is, is daar geen twijfel over mogelijk.

We moeten dus verschillende mogelijkheden elimineren waarom dit verschijnt:


  1. Er zijn discrepanties tussen de CREATE TABLE instructies en de UPDATE:

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

De mismatch is een spatie aan het begin van de namen.

Dit had een fout moeten opleveren van “Tabel” krneki_1 “bestaat niet” , dus ik vermoed dat je twee versies van de tabel hebt krneki_1, en de versie zonder de spatie” heeft niet de id_naslov kolom.

We hebben deze mogelijkheid geëlimineerd, het was een kopieer-plakfout van het OP.


  1. De kolomnaam in de CREATE TABLE en de UPDATE zijn niet identiek. Ze zien er misschien hetzelfde uit, maar er kunnen niet-afdrukbare tekens zijn of ze kunnen Unicode-tekens hebben die er hetzelfde uitzien maar verschillende codepunten zijn. Om erachter te komen, kunnen we deze zoekopdracht gebruiken:

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

die het verschil laat zien (niet benodigde kolommen verwijderd uit de uitvoer) :

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

Opmerking 12 is groter dan 10 en daar is het probleem! Dit betekent dat de kolomnaam 10 tekens heeft en 12 bytes gebruikt. Deze getallen moeten beide 9 zijn (als we id_naslov correct tellen en als alle 9 tekens ASCII waren), dus daar is iets vreemds aan de hand.

Dat kan. voeg hex(column_name) toe aan de keuzelijst van deze laatste zoekopdracht en we “zullen weten wat de kolomnaam precies is. Dan kun je deze wijzigen zodat het alleen afdrukbare ascii-tekens bevat.

Om dit op te lossen, heb je zoiets als dit nodig:

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

Antwoord

Het probleem kan zijn dat u was vergeten een use <database>; -instructie uit te voeren en bijgevolg “de invoeging niet in de juiste database uitvoerde.

Met andere woorden, u probeert mogelijk in te voegen in een tabel die in een andere database bestaat, maar met een andere structuur.

Antwoord

Het probleem kan zijn met aliassen in meerdere tabellen UPDATEs en DELETEs. Ik heb gevallen gevonden waarin AS k2 niet werkt zoals je zou verwachten. Verwijder de aliassen en gebruik gewoon de tabelnamen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *