两个表如下:
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又该如何写才能保证两个表的更新都是正确的?
解决方案 »
- 有没有谁知道oracle软件在哪下载《谢谢各位了》
- 【求助】 默认存储子句与分配策略不兼容
- oracle 异常处理
- 给大家出个数据库的题,高手来!
- Oracle中可否方便的将select查询集合转换为XML数据,并将XML数据当作一个字符串返回到JAVA程序中
- windows xp下安装了最新的oracle 11,每次启动总是有个oracle.exe的进程占用97%-99%的cpu,这是怎么回事?
- 关于一个ORCALE触发器的问题
- 有谁知道修改字段名的SQL语句?
- oracle在C1.7上装不了数据库高手帮我看看
- 为什么我重新启动机后,我不可以等进oracle?
- 可以在存储过程中,把执行的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的执行需要一定主键的条件,具体我不清楚。但我保证存在这种写法,我做过很多次。