Sql 按select语句插入-oracle

Sql 按select语句插入-oracle,sql,oracle,insert,oracle11g,Sql,Oracle,Insert,Oracle11g,我只是想把一列的值复制到另一个表的空列中。 这两个表是学生和付款。 学生有两列: rno-数字类型的主键//我用一些条目填充了它 金额//这是完全空的 付款也有相同的列数: rno-引用students表的rno的外键 金额//此项已填写 现在,为了从支付给学生的款项中复制金额列,我尝试了以下命令 插入学生(金额)从付款中选择金额 现在,通常这个命令就像一个符咒,但在这里它的行为略有不同。它抛出了一个错误 NULL值不能插入学生。rno 我试着推断可能是因为两个表中插入的条目数量不同,但

我只是想把一列的值复制到另一个表的空列中。 这两个表是
学生
付款
学生有两列:

  • rno-数字类型的主键
    //我用一些条目填充了它

  • 金额
    //这是完全空的

付款也有相同的列数:

  • rno-引用students表的rno的外键

  • 金额<代码>//此项已填写

现在,为了从支付给学生的款项中复制
金额
列,我尝试了以下命令

插入学生(金额)从付款中选择金额

现在,通常这个命令就像一个符咒,但在这里它的行为略有不同。它抛出了一个错误
NULL值不能插入学生。rno

我试着推断可能是因为两个表中插入的条目数量不同,但是对no进行了eqa。对于两个表中的条目,结果完全相同


所以问题是在这种情况下如何复制

您不想将记录添加到students表中(这就是
插入的内容)您想
更新现有记录

我不太熟悉Oracle语法,但我对这个问题的答案进行了调整,希望能满足您的需要

UPDATE students
SET    students.amount = (SELECT payments.amount
                          FROM   payments
                          WHERE  students.rno = payments.rno)  

您不想向students表中添加记录(这是
INSERT
所做的),您想
更新现有记录

我不太熟悉Oracle语法,但我对这个问题的答案进行了调整,希望能满足您的需要

UPDATE students
SET    students.amount = (SELECT payments.amount
                          FROM   payments
                          WHERE  students.rno = payments.rno)  

不太清楚您的要求,但这将使用payments表中匹配付款的总和填充STUDENTS表。这就是你想要的吗

UPDATE STUDENTS
SET    AMOUNT = (SELECT SUM(PAYMENTS.AMOUNTS)
                 FROM   PAYMENTS
                 WHERE  PAYMENTS.RNO = STUDENTS.RNO);

不太清楚您的要求,但这将使用payments表中匹配付款的总和填充STUDENTS表。这就是你想要的吗

UPDATE STUDENTS
SET    AMOUNT = (SELECT SUM(PAYMENTS.AMOUNTS)
                 FROM   PAYMENTS
                 WHERE  PAYMENTS.RNO = STUDENTS.RNO);

您的意思是只插入金额,还是希望在此处插入
rno
,以便数据有意义?您的意思是只插入金额,还是希望在此处插入
rno
,以便数据有意义?请注意,如果一个学生的付款超过1笔,则会出错。哦,这一点很好。出于某种原因,我认为这种关系是1:1。另外,谢谢你的编辑,我注意到后记是rno而不是mo;)@还有,有趣的是,这会抛出一个错误。如果我没有弄错的话,在SQL Server中,“最后”匹配将是更新中使用的值。我更喜欢甲骨文在这方面的做法。请注意,如果一个学生的付款超过1笔,这将是错误的。哦,这一点很好。出于某种原因,我认为这种关系是1:1。另外,谢谢你的编辑,我注意到后记是rno而不是mo;)@还有,有趣的是,这会抛出一个错误。如果我没有弄错的话,在SQL Server中,“最后”匹配将是更新中使用的值。我更喜欢甲骨文公司在这方面的表现。