两个表如下:
PERSON{ PERSON_ID, NAME, AGE, SEX }
STUDENT{ PERSON_ID, GRADE, CLASS }
STUDENT表通过主键PERSON_ID从PERSON继承.请问: 如果我需要做以下更新, SQL该如何写效率高而且正确?
set Student.Class = 2, Student.Name = "XXX"
where Stduent.Age = 20 and Student.Grade = 1两外: 如果我对主键PERSON_ID进行更新, SQL又该如何写才能保证两个表的更新都是正确的?
PERSON{ PERSON_ID, NAME, AGE, SEX }
STUDENT{ PERSON_ID, GRADE, CLASS }
STUDENT表通过主键PERSON_ID从PERSON继承.请问: 如果我需要做以下更新, SQL该如何写效率高而且正确?
set Student.Class = 2, Student.Name = "XXX"
where Stduent.Age = 20 and Student.Grade = 1两外: 如果我对主键PERSON_ID进行更新, SQL又该如何写才能保证两个表的更新都是正确的?
解决方案 »
- 关于拼接两张表的问题
- 数据库 表/索引的定义放在哪个系统表,我想导出整个schema 的DML?
- 存储过程,更新表时“表或视图不存在”。
- oracle 存储过程及游标问题 (过程调过程) !!!
- 菜鸟问题。按照用户导入,导出数据
- 我是初学者,oracle9i web管理--oracleoraHome92httpserver服务为什么开启后有自动关闭?谢谢大家!
- OCI中如何判断每个字段为null?
- 我在执行SQL语句的时候出现了下面的错误提示(我用的是ORACLE9)
- 求助!MS SQL Server 转换到 Oracle 语法!!!
- 刚从网上下了一个oracle 9i,安装时提示插入磁盘1????不知道到那里去找磁盘1??
- 可以在存储过程中,把执行的SQL写入txt文件吗?谢谢
- 在Oracle里怎么查询表结构
UPDATE PERSON
SET NAME='XXX'
WHERE PERSON_ID IN (
SELECT PERSON.PERSON_ID
FROM ( SELECT PERSON_ID FROM PERSON WHERE AGE = 20 )PERSON, (SELECT PERSON_ID FROM STUDENT WHERE GRADE = 1 )STUDENT
WHERE PERSON.PERSON_ID=STUDENT.PERSON_ID );
UPDATE STUDENT
SET CLASS=2
WHERE PERSON_ID IN (
SELECT PERSON.PERSON_ID
FROM ( SELECT PERSON_ID FROM PERSON WHERE AGE = 20 )PERSON, (SELECT PERSON_ID FROM STUDENT WHERE GRADE = 1 )STUDENT
WHERE PERSON.PERSON_ID=STUDENT.PERSON_ID )可是我觉得这样的SQL效率不高, 用了IN, 而且做了两次连接子查询...另外: 如果我需要更新主键的话, 第一个SQL语句执行后就会影响第二个SQL语句, 如何才能保证正确呢?
SET NAME= XXX ,class=2;
WHERE AGE = 20
and exists
(
SELECT 'Z'
FROM STUDENT
WHERE PERSON.PERSON_ID=STUDENT.PERSON_ID and GRADE = 1
)
还有你为什么把1个sql拆成2个sql来写.一样的条件可以更新多个数值的
楼主的表中,NAME 属于PERSON表,而CLASS属于STUDENT表,你写的SQL语句不能完成楼主的要求
(select a.person_id, a.name, a.age, a.sex, b.grade, b.class
from person a, student b
where a.person_id=b.person_id
and a.age=20 and b.grade=1)
set class = 2, name = 'XXX';思路就是先查询,然后更改,一条就可以。
这种SQL的执行需要一定主键的条件,具体我不清楚。但我保证存在这种写法,我做过很多次。