记一次错误解决:MySQL 1054 - Unknown column in where clause

2023-12-21 09:48

本文主要是介绍记一次错误解决:MySQL 1054 - Unknown column in where clause,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.背景介绍

这是我的表:

+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| na        | text         | YES  |     | NULL    |       |
| birthDate | datetime     | YES  |     | NULL    |       |
| class     | varchar(255) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+

这是我想完成的任务代码(目的:将张三的班级更新为李四的):

UPDATE test.student class 
SET class = ( SELECT class FROM student WHERE student.na = '李四') 
WHEREstudent.na = '张三'

二.遇到问题,搜索,解决问题……

1.遇到的第一个问题-1054:

1054 - Unknown column ‘student.na’ in 'where clause’
于是我将代码删减,排查可能的错误

UPDATE test.student class 
SET class = 1
WHEREstudent.na = '张三'

发现上述错误仍然存在,把where子句删掉就可以执行了,报错说【'student.na’行,未识别】,我十分不解,但当我删去前面的表名”student“后执行成功!

UPDATE test.student class 
SET class = 1
WHEREna = '张三'

于是我猜想,update命令限定了某张表,列名前就不可以画蛇添足地加表名了。

然后我将完整代码改成了:

UPDATE test.student class 
SET class = ( SELECT class FROM student WHERE na = '李四') 
WHEREna = '张三'

2.又见错误-1093:

1093 - You can’t specify target table ‘class’ for update in FROM clause
它的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中),
即不能依据某字段值做判断再来更新某字段的值。

网上查了一下,是MySQL不支持这种操作的错误,都是通过”绕“来解决
(来自:https://zhidao.baidu.com/question/68619324.html)
方案一:
多嵌套一层子查询,再进行删除,
方案二:
1.创建一张临时回表,将答要删除的条件自动存入临时表中:
2.再根据临时表,删除主表数据:
3.最后删除掉临时表:

我不想再建个表,所以用了方案一:

UPDATE test.student class 
SET class = (SELECT class from( SELECT class FROM student WHERE na = '李四') )
WHEREna = '张三'

我在外面嵌套了一层【(SELECT class from(____))】

3.但是又出现了问题-1248:

(我说,这挫败感来的也太频繁了,设计得这么不直观又易出错,怪不得程序员掉头发)
1248 - Every derived table must have its own alias
继续搜索……找到答案:https://blog.csdn.net/cao478208248/article/details/28122113
“这句话的意思是说每个派生出来的表都必须有一个自己的别名……进行嵌套查询的时候子查询出来的的结果是作为一个派生表来进行上一级的查询的,所以子查询的结果必须要有一个别名“

于是我模仿着加了个【as t】

UPDATE test.student class 
SET class = (SELECT class from( SELECT class FROM student WHERE na = '李四') as t )
WHEREna = '张三'

终于成功执行!

这篇关于记一次错误解决:MySQL 1054 - Unknown column in where clause的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/519504

相关文章

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端