mysql update 语句 子查询(带条件)
mysl update
·
update语句介绍
这是官网对update的介绍UPDATE Statement
开发中,一般我们都是写这种 update table a set field =value where id=x语句
不过也会遇到特殊的.比如想把table a 中的b列赋值给c列.或者说把table c 中的d列赋值给table a中的b列,这种情况下应该怎么做呢?
情况一 单表a列赋值给b列
情景:需要将书籍简称字段的值给书籍全程的字段赋值过去
首先来个简单的表结构
CREATE TABLE `book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`simple_name` varchar(10) DEFAULT NULL COMMENT '书籍简称',
`full_name` varchar(50) DEFAULT NULL COMMENT '书籍全称',
`price` decimal(10,2) DEFAULT NULL COMMENT '价格',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='书籍信息表';
然后插入两条数据
INSERT INTO `book` (`id`, `simple_name`, `full_name`, `price`) VALUES ('1', '哈利波特', NULL, '12.00');
INSERT INTO `book` (`id`, `simple_name`, `full_name`, `price`) VALUES ('2', '冰与火之歌', NULL, '20.00');
效果如下
这时候发现full_name字段为空,这时候需要将simple_name 给赋值过去
编写sql语句:
UPDATE book a ,(SELECT simple_name,id from book) b set a.full_name =b.simple_name where a.id=b.id;
这样就可以将full_name列给赋值了.
注意表名别名要有语义
情况二 多表a表 a列赋值给b表b列
复用book表
创建一个book_order表
CREATE TABLE `book_order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`book_id` int(10) DEFAULT NULL COMMENT '书籍id',
`full_name` varchar(50) DEFAULT NULL COMMENT '书籍全称',
`price` decimal(10,2) DEFAULT NULL COMMENT '价格',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='书籍信息表';
INSERT INTO `book_order` (`id`, `book_id`, `full_name`, `price`) VALUES ('1', '1', '哈利波特3', '100.00');
INSERT INTO `book_order` (`id`, `book_id`, `full_name`, `price`) VALUES ('2', '2', '冰与火之歌2', '300.00');
情景:来了个需求book表中的full_name字段的值要以book_order表中的full_name为准.要问为啥就是历史遗留问题
编写sql:
UPDATE book a ,(SELECT full_name,id,book_id from book_order) b set a.full_name =b.full_name where a.id=b.book_id;
即可解决
update语法
Single-table syntax:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
value:
{expr | DEFAULT}
assignment:
col_name = value
assignment_list:
assignment [, assignment] ...
Multiple-table syntax:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET assignment_list
[WHERE where_condition]
更多推荐
已为社区贡献1条内容
所有评论(0)