MySQL在同一语句中,不能先select出同一表中的某些值,再update这个表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL在同一语句中,不能先select出同一表中的某些值,再update这个表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2123字,纯文字阅读大概需要4分钟。
内容图文
You can't specify target table 'country_address' for update in FROM clause
表结构:
CREATE TABLE `country_address` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增列', `address_code` varchar(40) NOT NULL COMMENT '地区代码', `address_name` varchar(50) NOT NULL COMMENT '地区名称', `short_name` varchar(20) NOT NULL COMMENT '简称', `parent_code` varchar(40) DEFAULT NULL COMMENT '上级代码', `level` int(11) NOT NULL COMMENT '等级 1-省 2-市 3-区', `lng` varchar(20) DEFAULT NULL COMMENT '经度', `lat` varchar(20) DEFAULT NULL COMMENT '纬度', `sort` int(6) DEFAULT NULL COMMENT '排序', `created_time` datetime DEFAULT NULL COMMENT '创建时间', `updated_time` datetime DEFAULT NULL COMMENT '修改时间', `remark` varchar(250) DEFAULT NULL COMMENT '备注', `data_state` int(11) DEFAULT NULL COMMENT '状态 0-禁用 1-启用', PRIMARY KEY (`id`), KEY `Index_1` (`address_code`) ) ENGINE=InnoDB AUTO_INCREMENT=4670 DEFAULT CHARSET=utf8 COMMENT='国家省市区地址'
要禁用某个省份下的所有市和县
1、禁用省份
SELECT * FROM country_address WHERE short_name IN('新疆','西藏','台湾','香港','澳门','海南'); UPDATE country_address SET data_state=0 WHERE short_name IN('新疆','西藏','台湾','香港','澳门','海南');
2、禁用城市
SELECT * FROM country_address WHERE parent_code IN (SELECT address_code FROM country_address WHERE short_name IN('新疆','西藏','台湾','香港','澳门','海南')) UPDATE country_address SET data_state=0 WHERE parent_code IN ( SELECT a.address_code FROM country_address a WHERE a.short_name IN('新疆','西藏','台湾','香港','澳门','海南') )
这里执行update就会报错,换种方式,采用多表查询更新数据
UPDATE country_address a,country_address b SET a.data_state = 0 WHERE a.parent_code = b.address_code AND b.short_name IN ('新疆','西藏','台湾','香港','澳门','海南')
3、禁用区县
下面同理,换种方式更新同一张表数据就可以了
SELECT c.* FROM country_address a,country_address b,country_address c WHERE c.parent_code=b.address_code AND b.parent_code=a.address_code AND a.short_name IN ('新疆','西藏','台湾','香港','澳门','海南') UPDATE country_address a,country_address b,country_address c SET c.data_state = 0 WHERE c.parent_code=b.address_code AND b.parent_code=a.address_code AND a.short_name IN ('新疆','西藏','台湾','香港','澳门','海南')
内容总结
以上是互联网集市为您收集整理的MySQL在同一语句中,不能先select出同一表中的某些值,再update这个表全部内容,希望文章能够帮你解决MySQL在同一语句中,不能先select出同一表中的某些值,再update这个表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。