前言
这篇文章我们实现一下在数据库中使用SQL语句来修改多个表之间的数据
需求演示
student表,里面有id,name <====> teacher表,里面有t_id,stu_id,stu_name(这个字段下没有数据)
我们的需求就是将student表中的name赋值给teacher表的stu_name。
案例
Oracle修改语句如下:
UPDATE teacher SET stu_name = (SELECT name FROM student WHERE student .id = teacher.stu_id);
上面这条SQL语句执行的时候会有问题,如果老师表中的stu_id和学生表中的id不一致对应的话,会返回NULL,导致语句执行失败,为了避免数据不一致,我们来更新一下这条SQL。
注:这条SQL只允许在所有ID数量且全部一致下执行,否则会报错
更新后的SQL
UPDATE teacher SET stu_name = (SELECT name FROM student WHERE student .id = teacher.stu_id)
WHERE EXISTS (SELECT * FROM student WHERE student.id = teacher.stu_id);
我们只需要在原有SQL上添加EXISTS 条件即可,它不会返回任何数据,只返会布尔值(true/false),如果为false则我们上面的修改条件不会执行它。
在执行修改语句的时候,不要使用别名来代替,尽量使用完整表名来。 例如(√:student.id,×:s.id)
解决SQL更新多表数据时的数据一致性问题
1865





