У меня есть следующие три таблицы следующим образом,
select * from student_grade;
+--------------+----------+----------+-------+--------------------------+
| enrollmentid | courseid | personid | grade | credits_earned |
+==============+==========+==========+=======+==========================+
| 1 | 1001 | 1 | A | null |
| 2 | 1002 | 1 | B | null |
| 3 | 1003 | 1 | A | null |
| 4 | 3001 | 3 | A | null |
| 5 | 3001 | 2 | B | null |
| 6 | 4001 | 4 | A | null |
| 7 | 4002 | 4 | A | null |
+--------------+----------+----------+-------+--------------------------+
7 tuples
sql>select * from course;
+----------+-------------------+---------+--------------+
| courseid | title | credits | departmentid |
+==========+===================+=========+==============+
| 1001 | Data structures | 12 | 101 |
| 1002 | Algorithms | 12 | 101 |
| 1003 | Graphics | 20 | 101 |
| 2001 | DSP | 20 | 102 |
| 2002 | Matlab | 20 | 102 |
| 2003 | Maths | 10 | 102 |
| 3001 | CAD | 10 | 104 |
| 4001 | Power electronics | 10 | 103 |
| 4002 | Semi conductors | 20 | 103 |
+----------+-------------------+---------+--------------+
9 tuples
sql>select * from grade_to_credits;
+-----------+--------------------------+
| gradechar | credits |
+===========+==========================+
| A | 1 |
| B | 0.9 |
+-----------+--------------------------+
Я пытаюсь сделать следующее:
Я обновляю столбец credits_earned
таблицы student_grade
, используя столбцы credits
таблицы course
и credits
таблицы grade_to_credits
.
просто так,
select c.credits * gc.credits
from course c, grade_to_credits gc, student_grade sg
where sg.courseid = c.courseid and sg.grade = gc.gradechar;
+--------------------------+
| L2 |
+==========================+
| 12 |
| 10.8 |
| 20 |
| 10 |
| 9 |
| 10 |
| 20 |
+--------------------------+
Я получаю вышеуказанные значения, когда выполняюсь отдельно, но теперь я хочу обновить эти значения в таблице student_grade
, используя update query.
Теперь я использую запрос как:
update student_grade
set credits_earned = (select c.credits * gc.credits
from course c, grade_to_credits gc, student_grade sg
where sg.courseid = c.courseid
and sg.grade = gc.gradechar);
Но приведенный выше запрос не работает, я получаю сообщение об ошибке:
Нарушение кардинальности, ожидается скалярное значение
Я знаю, я могу индивидуально установить значения, но я хочу сделать это с помощью команды обновления.
Пожалуйста, поправьте меня, где я иду не так.