两个更新SQL语句之间的区别?

时间:2013-12-17 17:29:54

标签: sql database oracle database-design oracle-sqldeveloper

我为这个愚蠢的问题道歉,但是需要有人用简单的术语来解释为什么第一种选择效果最好。

问题:我有一个名为student的表,表结构如下所示

Student_id   Student_name    Subject1_marks    Subject2_marks   
001           John              11                    0 
002           Barack            12                    1 
003           McCain            12                    0 

现在,我需要将Subject1_marks设置为subject2_marks,其中Subject2_marks等于0

我写的SQL是:

第一个SQL:

update student set Subject2_marks = Subject1_marks
where Subject2_marks= 0;

第二个SQL:

update student a set a.Subject2_marks=b.Subject1_marks from student b
where a.student_id=b.student_id
and a.Subject2_marks= 0;

对我来说,第一个SQL工作得非常好,但第二个没有,需要帮助才能理解为什么第二个不起作用。

非常感谢任何简单的解释。

谢谢,

1 个答案:

答案 0 :(得分:1)

您指定了a.Subject2_marks = 0。但错过了本专栏的另一个表格。因此,对于student_id,其他表中的所有行都将被连接,即使标记非零,该列也将再次更新n ..最后一次更新最终停留!

Student_id   Student_name    Subject1_marks    Subject2_marks   
001           John              11                    0 
001           John              13                    2 
002           Barack            12                    1 
003           McCain            12                    0 

在上面的数据001中,Student_id有2个标记详细信息,发生了什么, 左侧表格001-11-0合格,另一侧有001-11-0,001-13-2

所以,A的1行将在此连接中更新两次,标记为11,下一个标记为13.顺序无法判断!。