记一次错误解决: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 = '李四') 
WHERE
	student.na = '张三'

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

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

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

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

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

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

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

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

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

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 = '李四') )
WHERE
	na = '张三'

我在外面嵌套了一层【(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 )
WHERE
	na = '张三'

终于成功执行!

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
MySQL中的"Unknown column"错误通常是由以下几个原因引起的: 1. 列名错误:请检查SQL语句中的列名是否正确,包括拼写和大小写。可能是因为在WHERE子句中指定了不存在的列名。 2. 表名错误:请检查SQL语句中的表名是否正确,包括拼写和大小写。可能是因为在FROM子句中指定了不存在的表名。 3. 表别名错误:如果在SQL语句中使用了表别名,请检查别名是否正确。可能是因为在WHERE子句中指定了错误的别名。 4. SQL语句语法错误:请检查SQL语句的语法是否正确,包括括号的使用、逗号的位置等。可能是因为在WHERE子句中使用了错误的语法。 要解决这个问题,可以按以下步骤进行: 1. 仔细检查SQL语句中的列名和表名是否正确。可以使用SHOW COLUMNS语句查看表的列名和表名的正确拼写。 2. 如果使用了表别名,请确保别名是正确的,并且在所有使用到的地方都是一致的。 3. 检查SQL语句的语法是否正确,特别是WHERE子句中的语法。可以使用SQL语法检查工具(如SQLFiddle)来验证语法的正确性。 4. 如果以上方法都无法解决问题,可以考虑重新创建表或者重建索引。有时候,表的结构可能发生了变化,导致某些列或者索引不存在。 总的来说,"Unknown column"错误通常是因为SQL语句中存在列或表名的错误引起的。正确地检查和拼写这些名称可以解决这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超自然祈祷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值