table A: sutdent_no, grade,come
table B: student_no, score现在A中有两条数据 001,0.00
002,0.00
B中有一条数据 001,200.00要对A中come为 bj 的学生进行更新,若A中的学生在B中有记录,则把其grade更新为B中的score 我的语句是
UPDATE A SET (GRADE)=(
SELECT B.SCORE FROM B
WHERE A.STUDENT_NO=B.STUDENT_NO )WHERE A.COME='bj' AND EXISTS(
SELECT 1 FROM A ,B WHERE A.STUDENT_NO=B.STUDENT_NO
);
为什么会更新A中的两条记录,把002,0.00 更新成了 NULL
table B: student_no, score现在A中有两条数据 001,0.00
002,0.00
B中有一条数据 001,200.00要对A中come为 bj 的学生进行更新,若A中的学生在B中有记录,则把其grade更新为B中的score 我的语句是
UPDATE A SET (GRADE)=(
SELECT B.SCORE FROM B
WHERE A.STUDENT_NO=B.STUDENT_NO )WHERE A.COME='bj' AND EXISTS(
SELECT 1 FROM A ,B WHERE A.STUDENT_NO=B.STUDENT_NO
);
为什么会更新A中的两条记录,把002,0.00 更新成了 NULL
WHERE A.COME='bj'
AND EXISTS(SELECT 1 FROM B WHERE A.STUDENT_NO=B.STUDENT_NO)
EXISTS(
SELECT 1 FROM A ,B WHERE A.STUDENT_NO=B.STUDENT_NO
);
你的没起作用
可以,但是 SELECT 1 FROM A ,B WHERE A.STUDENT_NO=B.STUDENT_NO 和 SELECT 1 FROM B WHERE A.STUDENT_NO=B.STUDENT_NO 结果一样啊 为什么更新的结果不一样了呢
SELECT 1 FROM A ,B WHERE A.STUDENT_NO=B.STUDENT_NO SELECT 1 FROM B WHERE A.STUDENT_NO=B.STUDENT_NO
SELECT 1 FROM B WHERE A.STUDENT_NO=B.STUDENT_NO
就是跟外层表查数据与里层的b表进行比对 匹配则更新
using B
on(A.student_mo=B.student_no and A.come='bj')
when match then
update set A.grade=B.score 这样可以不~~~
merge into A using B on( A.STUDENT_NO=B.STUDENT_NO)
when matched then
update set A.GRADE=B.SCORE
where A.COME='bj'