前言
总结SQL中的bug问题
一、bug描述
You can't specify target table 'CUP_TEST_CLASS_LIST' for update in FROM clause
翻译一下:
不能在FROM子句中指定更新的目标表’CUP_TEST_CLASS_LIST’白话一下:
不能先select出同一表中的某些值,再update这个表(在同一语句中)
二、需求描述
有一张表,想要改变
某一列
中的某些字段
的数据。就是 修改
LIST
表中的NAME
字段 数据,将NAME = 'SCA阿拉比卡标准'
修改为NAME = '阿拉比卡标准'
三、错误做法
然后手写了一下SQL(本以为很简单,没想到很复杂),如下所示
UPDATE LIST
SET NAME = '阿拉比卡标准'
WHERE ID IN (
SELECT ID
FROM LIST
WHERE NAME = 'SCA阿拉比卡标准'
)
这样是不行的,于是就报错了,最上面的错误
四、正确写法
1. 正确 sql
UPDATE LIST
SET NAME = '阿拉比卡标准'
WHERE ID IN (
SELECT T.ID
FROM (
SELECT ID
FROM LIST
WHERE NAME = 'SCA阿拉比卡标准'
)T
);
2. sql 片段解释:
(
SELECT ID
FROM CUP_TEST_CLASS_LIST
WHERE CUP_TEST_CLASS_NAME = 'SCA阿拉比卡标准'
)T
这个意思就是,将获取的数据 ID字段
设为一个新表,新表名字为 T