Error: Code 1054. Unknown column "U2.id_naslov" in "field list" zostaje wyrzucony na to proste zapytanie w 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) 

Szukałem i czytałem inne posty w sieci, ale nic nie pomaga …

Myślę, że to trywialne rozwiązanie ale po prostu tego nie widzę.

Ten rodzaj błędu nigdy nie pojawił się na TSQL (serwer sql).

Tabela krneki_2 została utworzona przez Środowisko pracy MySQL poprzez import danych (utwórz nową table) później, gdy wystąpił ten błąd, zmieniłem również pola liczbowe na smallint, aby sprawdzić, czy to pomaga … ale … nic.

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

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

Wyniki z information_schema, a konkretnie z zapytania sugerowanego w komentarzach:

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

Wyniki dla krneki_1 i naslov:

Wyniki dla 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) 

Wyniki dla 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) 

Dalsze poszukiwania, zgodnie z sugestią:

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

Wyniki dla 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) 

Wyniki dla 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 z 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 z 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) 

Odpowiedź

Komunikat o błędzie jest dość jasny. Tabela krneki_2 nie ma kolumny o nazwie id_naslov. O ile nie występuje jakieś uszkodzenie w tabelach systemowych lub błąd, nie ma co do tego wątpliwości.

Musimy więc wyeliminować kilka możliwości, dlaczego to się pojawia:


  1. Występują niezgodności między instrukcjami CREATE TABLE a UPDATE:

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

Niezgodność to spacja na początku nazwy.

Powinno to spowodować błąd „Tabela” krneki_1 „nie” nie istnieje „, więc zgodnie z moją wiedzą, że masz dwie wersje tabeli krneki_1, a wersja bez spacji nie ma kolumny id_naslov.

Wyeliminowaliśmy tę możliwość, był to błąd kopiowania wklejania z OP.


  1. Nazwa kolumny w CREATE TABLE i UPDATE nie są identyczne. Mogą wyglądać tak samo, ale mogą występować znaki niedrukowalne lub mogą mieć znaki Unicode, które wyglądają tak samo, ale są różnymi punktami kodowymi. Aby się tego dowiedzieć, możemy użyć zapytania:

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

, które ujawnia różnicę (niepotrzebne kolumny usunięte z wyniku) :

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

Uwaga 12 jest większa niż 10 i jest problem! Oznacza to, że nazwa kolumny ma 10 znaków i zajmuje 12 bajtów. Te liczby powinny wynosić 9 (jeśli poprawnie policzymy id_naslov i jeśli wszystkie 9 znaków to ASCII), więc dzieje się tam coś podejrzanego.

Możesz dodaj hex(column_name) do listy wyboru tego ostatniego zapytania, a będziemy wiedzieć, jaka dokładnie jest nazwa kolumny. Następnie możesz ją zmienić, aby zawierała tylko drukowalne znaki ASCII.

Aby to naprawić, potrzebujesz czegoś takiego:

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

Odpowiedź

Problem może polegać na tym, że zapomniałeś wykonać instrukcję use <database>; i w konsekwencji nie wykonałeś wstawiania we właściwej bazie danych.

Innymi słowy, może próbujesz wstawić plik do tabeli, która istnieje w innej bazie danych, ale ma inną strukturę.

Odpowiedź

Problem może mieć aliasy w wielu tabelach UPDATEs i DELETEs. Znalazłem przypadki, w których AS k2 nie działa zgodnie z oczekiwaniami. Usuń aliasy i po prostu użyj nazw tabel.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *