Error: Code 1054. Unknown column "U2.id_naslov" in "field list" heitetään tälle yksinkertaiselle kyselylle MySQL Workbenchissä :

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

Olen etsinyt ja lukenut muita viestejä netistä, mutta mikään ei auta …

Luulen, että se on triviaali ratkaisu mutta en vain näe sitä.

Tällaista virhettä ei koskaan ilmennyt TSQL: ssä (sql-palvelimessa).

Mysql-työpöytä loi taulukon krneki_2 tietojen tuonnin kautta (luo uusi Taulukko) myöhemmin tämän virheen tapahtuessa muutin myös numerokentät pieniksi vain nähdäkseni, auttaako se … mutta … ei mitään.

Tulos kohteelle 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) 

Tulos kohteelle 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) 

Tulokset information_schema, erityisesti kommenteissa ehdotetusta kyselystä:

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

Tulokset haulle krneki_1 ja naslov:

Tulokset haulle krneki_2 ja 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) 

Tulokset haulle krneki_2 ja 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) 

Edelleen kaivaminen ehdotuksen mukaan:

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

Tulokset haulle 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) 

Tulokset haulle 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 HEXillä :

+-------------+------------+----------+-----------+----------------+--+--+-------------------------+ |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 HEX: llä:

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

vastaus

Virhesanoma on melko selkeä. Taulukossa krneki_2 ei ole saraketta nimeltä id_naslov. Ellei järjestelmätaulukoissa ole virheitä tai virheitä, siitä ei ole epäilystäkään.

Meidän on siis poistettava useita mahdollisuuksia, miksi tämä näkyy:


  1. Lausekkeiden CREATE TABLE ja UPDATE välillä on ristiriitoja:

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

Vastaavuus on väli nimien alussa.

Tämän olisi pitänyt antaa virhe ”Taulukko” krneki_1 ”ei” ole ”, joten koulutettu arvaukseni on, että sinulla on kaksi versiota taulukosta krneki_1, ja versiossa, jossa ei ole välilyöntiä, ei ole saraketta id_naslov.

Poistimme tämän mahdollisuuden, se oli kopiointiliitevirhe toimenpideohjelmasta.


  1. Sarakkeen nimi CREATE TABLE ja UPDATE eivät ole identtisiä. Ne voivat näyttää samoilta, mutta voi olla tulostamattomia merkkejä tai niillä voi olla Unicode-merkkejä, jotka näyttävät samalta, mutta ovat erilaisia koodipisteitä. Selvittämiseksi voimme käyttää tätä kyselyä:

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

joka paljastaa eron (ei tarvittuja sarakkeita poistettu lähdöstä) :

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

Huomautus 12 on suurempi kuin 10 ja siinä on ongelma! Se tarkoittaa, että sarakkeen nimessä on 10 merkkiä ja se käyttää 12 tavua. Näiden numeroiden tulisi molemmat olla 9 (jos laskemme id_naslov oikein ja jos kaikki 9 merkkiä olivat ASCII), niin siellä tapahtuu jotain hämmentävää.

Voit Lisää hex(column_name) tämän viimeisen kyselyn valintaluetteloon ja tiedämme mikä sarakkeen nimi on. Sitten voit muuttaa sitä siten, että siinä on vain tulostettavia ASCII-merkkejä.

Korjaamiseen tarvitaan jotain tällaista:

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

Vastaa

Ongelmana voi olla, että olit unohtanut suorittaa use <database>; -lausekkeen ja sen vuoksi et suorittanut lisäystä oikeaan tietokantaan.

Toisin sanoen saattaa yrittää lisätä taulukkoon, joka on eri tietokannassa, mutta jolla on erilainen rakenne.

Vastaa

Ongelma voi olla aliaksilla monitaulukossa UPDATEs ja DELETEs. Olen havainnut tapauksia, joissa AS k2 ei toimi odotetusti. Poista aliakset ja käytä taulukoiden nimiä.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *