mysql - 如何使单元格值相对于另一个表?

标签 mysql

在 SQL 中,假设我们有一个名为“courses”、“student”和“courses_taken”的表

类(class)

c_id key int
name text
credits int

学生

s_id key int
name text
total_credits int

已修课

id key int
s_id foreign int
c_id foreign int

我想让 total_credits 字段基本上等于

select sum(c.credits) from courses c, students s, courses_taken ct where ct.c_id = courses.c_id and ct.s_id = s.s_id;

我假设这不是正确的方法,因为我以前从未使用过多表查询,如果有人可以帮助我处理该 sql 查询,那就太好了。谢谢

最佳答案

MySQL 中没有任何“内置”的东西可以让您直接执行此操作。每次更新 courses_takencourses 表时,您都必须编写一些代码来更新 total_credits

虽然有几个选项可以处理这个问题

  1. 在您的应用程序中编写代码以维护 total_credits 列。

  2. 使用 coursescourses_taken 表上的触发器在数据库中编写代码,以保持 total_credits 列最新插入/更新/删除行的日期。

  3. 去掉 total_credits 列,只在需要时通过查询计算它(参见@andy 的回答)。

  4. 编写一个定期计算 total_credits 的批处理作业,并接受它不会始终 100% 正确的事实。

您选择哪个取决于您在其中使用此数据库的应用的要求。

关于mysql - 如何使单元格值相对于另一个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26788685/

相关文章:

mysql - 在 cakephp 3.0 中存在多重关联时,在查询生成器中使用条件吗?

php - 将 href 链接转换为图像链接使用缩略图

mysql - 使用 MySQL 进行双向复制以在多个离线客户端之间同步数据库应用程序的实例?

mysql - 为什么我们应该在用户表中有一个 ID 列?

mysql - 递归mysql查询检查用户权限

mysql - 编写一个大的 sql 查询还是通过代码处理它?

mysql - 将所有 mysql 表从 latin1_swedish_ci 切换到 utf8_unicode_ci 时会有影响吗?

php - MySQL Inner Join,从多个表中选择

php - 带有后退按钮问题的多页PHP表单

mysql - 基于 lower_case_table_names 系统变量的 information_schema.routines 上的 SELECT 行为