AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 162900
Accepted
nobsvalo
nobsvalo
Asked: 2017-02-02 07:31:59 +0800 CST2017-02-02 07:31:59 +0800 CST 2017-02-02 07:31:59 +0800 CST

erro de consulta de atualização do mysql Código 1054 coluna desconhecida na lista de campos

  • 772

Error: Code 1054. Unknown column 'U2.id_naslov' in 'field list'é lançado nesta consulta simples no 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)

Já pesquisei e li outros posts na net mas nada ajuda...

Eu acho que é uma solução trivial, mas eu simplesmente não consigo vê-la.

Esse tipo de erro nunca apareceu no TSQL (servidor sql).

A tabela krneki_2 foi criada pelo Mysql workbench via importação de dados (criar nova tabela) mais tarde, quando ocorreu esse erro, também alterei os campos numéricos para smallint apenas para ver se ajuda... mas... nada.

Resultado de 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)

Resultado de 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)

Resultados de information_schema, especificamente desta consulta sugerida nos comentários:

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

Resultados para krneki_1e naslov:

+---------------+--------------+-------------+----------------------+------------------+
| table_catalog | table_schema | table_name  | column_name          | ordinal_position |
+---------------+--------------+-------------+----------------------+------------------+
| def           | hq_db        | krneki_1    | id_naslovi_zaposleni |                1 |
| def           | hq_db        | krneki_1    | id_naslov            |                2 |
+---------------+--------------+-------------+----------------------+------------------+
2 rows in set (0.00 sec)

Resultados para krneki_2e 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)

Resultados para krneki_2e 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)

Mais escavações, como sugerido:

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

Resultados para 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)

Resultados para 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 com 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 com 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)
mysql update
  • 3 3 respostas
  • 81999 Views

3 respostas

  • Voted
  1. Best Answer
    ypercubeᵀᴹ
    2017-02-03T02:18:00+08:002017-02-03T02:18:00+08:00

    A mensagem de erro é bastante clara. A tabela krneki_2não tem uma coluna chamada id_naslov. A menos que haja alguma corrupção nas tabelas do sistema ou um bug, não há dúvida sobre isso.

    Portanto, temos que eliminar várias possibilidades de por que isso aparece:


    1. Há incompatibilidades entre as CREATE TABLEdeclarações e o UPDATE:

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

    A incompatibilidade é um espaço no início dos nomes.

    Isso deveria ter dado um erro de "A tabela 'krneki_1' não existe" , então meu palpite é que você tem duas versões da tabela krneki_1e a versão sem o espaço não tem a id_naslovcoluna.

    Eliminamos essa possibilidade, foi um erro de copiar e colar do OP.


    1. O nome da coluna no CREATE TABLEe no UPDATEnão são idênticos. Eles podem ter a mesma aparência, mas pode haver caracteres não imprimíveis ou podem ter caracteres Unicode que parecem iguais, mas são pontos de código diferentes. Para descobrir, podemos usar esta consulta:

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

    que revela a diferença (colunas não necessárias removidas da saída):

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

    A nota 12 é maior que 10 e aí está o problema! Isso significa que o nome da coluna tem 10 caracteres e usa 12 bytes. Esses números devem ser 9 (se contarmos id_naslovcorretamente e se todos os 9 caracteres forem ASCII), então algo suspeito está acontecendo lá.

    Você pode adicionar hex(column_name)na lista de seleção desta última consulta e saberemos exatamente qual é o nome da coluna. Então você pode alterá-lo para ter apenas caracteres ASCII imprimíveis.

    Para corrigir, você precisa de algo assim:

    set @column := X'EFBBBF69645F6E61736C6F76' ;  
    set @qry:= concat('alter table krneki_2 change column ', 
                      @column, 
                      ' id_naslov smallint') ;
    prepare stmt from @qry ;
    execute stmt ;
    
    • 8
  2. Adrian Sweeney
    2020-11-04T04:02:31+08:002020-11-04T04:02:31+08:00

    O problema pode ser que você esqueceu de executar uma use <database>;instrução e, consequentemente, não estava executando a inserção no banco de dados correto.

    Em outras palavras, você pode estar tentando inserir em uma tabela que existe em um banco de dados diferente, mas com uma estrutura diferente.

    • 0
  3. Rick James
    2017-02-02T13:32:37+08:002017-02-02T13:32:37+08:00

    O problema pode estar com aliases em várias tabelas UPDATEse arquivos DELETEs. Encontrei casos em AS k2que não funciona como seria de esperar. Remova os aliases e simplesmente use os nomes das tabelas.

    • -1

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve