前言
这篇文章我们实现一下在数据库中使用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)