Основа вопроса:
Напишите оператор UPDATE, чтобы вычислить средний балл каждого учащегося, и заполните его в поле avg_grade в таблице учащихся.
Структура таблицы:
Оператор SQL, определяющий структуру таблицы, выглядит следующим образом:
CREATE TABLE student (
sno varchar(6) NOT NULL,
sname varchar(10),
sex char(2),
нация char(2),
pnum char(18),
дата рождения,
phone char(11),
dept varchar(20),
avg_grade float(4,2),
PRIMARY KEY (sno)
);
CREATE TABLE score (
sno varchar(6) NOT NULL,
cno varchar(6) NOT NULL,
term varchar(15),
grade int(11),
PRIMARY KEY (sno,cno)
);
образец таблицы
Образец таблицы, соответствующий приведенной выше структуре таблицы, некоторые данные следующие:
student
поверхность:
score
поверхность:
Пример вывода:
Пример вывода, часть данных выглядит следующим образом:
При написании этого вопроса произошла ошибка, с которой я никогда раньше не сталкивался:
mysql报错:1093 - Вы не можете указать целевую таблицу "student" для обновления в предложении FROM
Это означает: в операторе SQL вы не можете сначала запросить определенное значение в таблице, а затем изменить таблицу.
Невозможно одновременно запрашивать и изменять одну и ту же таблицу.
Мой код: напрямую изменить среднее значение, полученное из запроса, в качестве измененного содержимого.
Решение: используйте найденную информацию в качестве новой виртуальной таблицы, выполните запрос в виртуальной таблице, а затем измените таблицу учащихся.
ак исходный код:
update student
set avg_grade=(
select s.avg_grade from(
select student.sno,round(avg(grade),2) as avg_grade
from score,student
where score.sno = student.sno
group by student.sno
)s
where student.sno = s.sno)