Вставить оператором выбора -oracle - PullRequest
0 голосов
/ 27 февраля 2012

Я просто пытался скопировать значения одного столбца в пустой столбец другой таблицы. Две таблицы: students и payments. Студенты имеют два столбца:

  • rno - первичный ключ типа номера // i filled it with some entries

  • сумма //this is completely empty

платежи также имеют одинаковое количество столбцов:

  • rno - ссылка на внешний ключ rno таблицы студентов

  • сумма //this is FILLED

Теперь, чтобы скопировать amounts столбец из платежей студентам, я попробовал эту команду

insert into students(amount) select amount from payments ;

теперь обычно эта команда работает как шарм, но здесь она немного отличается. Выдает ошибку, что NULL values cannot be inserted into students.rno

Я попытался рассуждать, что, возможно, это из-за разного количества записей, вставленных в две таблицы, но при уравнении нет. записей в обеих таблицах, один и тот же результат.

Итак, вопрос в том, как я могу скопировать в такой ситуации?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2012

Не совсем ясно о ваших требованиях, но это заполнит таблицу STUDENTS суммой совпадающих платежей в таблице PAYMENTS. Это то, что вы ищете?

UPDATE STUDENTS
SET    AMOUNT = (SELECT SUM(PAYMENTS.AMOUNTS)
                 FROM   PAYMENTS
                 WHERE  PAYMENTS.RNO = STUDENTS.RNO);
1 голос
/ 27 февраля 2012

Вы не хотите добавлять записи в таблицу учеников (что делает INSERT), которые вы хотите UPDATE существующих записей.

Я не очень знаком с синтаксисом Oracle, но яадаптировал ответ на этот вопрос Обновление оператора с внутренним объединением в Oracle , чтобы, надеюсь, удовлетворить ваши потребности.

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