Error: Code 1054. Unknown column "U2.id_naslov" in "field list"がMySQLWorkbenchのこの単純なクエリでスローされます:

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

ネット上の他の投稿を検索して読んだことがありますが、何も役に立ちません…

それは簡単な解決策だと思いますしかし、私はそれを見ることができません。

この種のエラーはTSQL(sqlサーバー)では発生しませんでした。

テーブルkrneki_2は、Mysqlワークベンチによってデータインポート(create new表)後でこのエラーが発生したときに、数値フィールドをsmallintに変更して、役立つかどうかを確認しました…しかし…何もありません。

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) 

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) 

information_schemaの結果、特にコメントで提案されたこのクエリの結果:

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

の結果krneki_1およびnaslov

krneki_2naslovの結果:

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

krneki_2zaposlenの結果:

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

提案されているように、さらに掘り下げます:

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

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) 

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

回答

エラーメッセージは非常に明確です。テーブルkrneki_2には、id_naslovという名前の列がありません。システムテーブルに何らかの破損やバグがない限り、それについては疑問の余地はありません。

したがって、これが発生するいくつかの可能性を排除する必要があります。


  1. CREATE TABLEステートメントとUPDATEの間に不一致があります:

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

不一致は、名前の先頭のスペースです。

これにより、「テーブル “krneki_1″は「存在しません」」というエラーが発生するはずなので、私の推測では、テーブルには2つのバージョンがありますkrneki_1であり、スペースのないバージョンにはid_naslov列がありません。

この可能性を排除しました。これは、コピーと貼り付けのエラーでした。 OPから。


  1. CREATE TABLEおよびは同一ではありません。それらは同じように見えるかもしれませんが、印刷できない文字があるかもしれませんし、同じように見えるが異なるコードポイントであるUnicode文字を持っているかもしれません。調べるには、次のクエリを使用できます:

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

違いを明らかにします(出力から列を削除する必要はありません) :

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

注12は10より大きく、問題があります。これは、列名が10文字で、12バイトを使用することを意味します。これらの数値は両方とも9である必要があるため(id_naslovを正しくカウントし、9文字すべてがASCIIである場合)、そこで何か怪しいことが起こっています。

この最後のクエリの選択リストにhex(column_name)を追加すると、列名が正確にわかります。次に、印刷可能なASCII文字のみを持つように変更できます。

修正するには、次のようなものが必要です。

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

回答

問題は、use <database>;ステートメントの実行を忘れたために、正しいデータベースで挿入を実行しなかった可能性があります。

つまり、別のデータベースに存在するが、構造が異なるテーブルに挿入しようとしている可能性があります。

回答

問題複数テーブルのUPDATEsおよびDELETEsにエイリアスがある場合があります。 AS k2が期待どおりに機能しない場合があります。エイリアスを削除し、テーブル名を使用するだけです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です