AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 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

mysql更新查询错误代码1054字段列表中的未知列

  • 772

Error: Code 1054. Unknown column 'U2.id_naslov' in 'field list'在 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)

我在网上搜索并阅读了其他帖子,但没有任何帮助......

我想这是一个微不足道的解决方案,但我只是看不到它。

TSQL(sql server)上从未出现过这种错误。

表 krneki_2 是由 Mysql 工作台通过数据导入(创建新表)创建的,后来发生此错误时,我还将数字字段更改为 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:

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

结果krneki_2和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)

结果krneki_2和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)

进一步挖掘,如建议的那样:

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:

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

+-------------+------------+----------+--------------------+----------------+--+--+----------------------------------------+
|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 个回答
  • 81999 Views

3 个回答

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

    错误信息非常清楚。该表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'不存在”的错误,所以我有根据的猜测是你有两个版本的表krneki_1,没有空格的版本没有id_naslov列。

    我们消除了这种可能性,这是来自 OP 的复制粘贴错误。


    1. CREATE TABLE和中的列名UPDATE不相同。它们可能看起来相同,但可能存在不可打印的字符,或者它们可能具有看起来相同但代码点不同的 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 ;
    
    • 8
  2. Adrian Sweeney
    2020-11-04T04:02:31+08:002020-11-04T04:02:31+08:00

    问题可能是您忘记了执行use <database>;语句,因此没有在正确的数据库中执行插入。

    换句话说,您可能试图插入到存在于不同数据库中但具有不同结构的表中。

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

    问题可能出在多表UPDATEs和DELETEs. 我发现了一些AS k2不符合预期的情况。删除别名并简单地使用表名。

    • -1

相关问题

  • 是否有任何 MySQL 基准测试工具?[关闭]

  • 我在哪里可以找到mysql慢日志?

  • 如何优化大型数据库的 mysqldump?

  • 什么时候是使用 MariaDB 而不是 MySQL 的合适时机,为什么?

  • 组如何跟踪数据库架构更改?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve