Mysql 插入到从子查询派生表名的表中

Mysql 插入到从子查询派生表名的表中,mysql,Mysql,我有一个名为Student_Info table、Subject_Info table的表,以及一个属于每个学生的单独表,其中包含该学生的每个主题参数的信息(如主题名称、他在该主题中获得的分数等) 学生信息 +----+----------+ | Id | Name | +----+----------+ | 1 | Sam | | 2 | Taylor | | 3 | Rick | +----+---------

我有一个名为Student_Info table、Subject_Info table的表,以及一个属于每个学生的单独表,其中包含该学生的每个主题参数的信息(如主题名称、他在该主题中获得的分数等)

学生信息

+----+----------+    
| Id | Name     |    
+----+----------+    
|  1 | Sam      |        
|  2 | Taylor   |   
|  3 | Rick     |
+----+----------+
主题信息

+---------------+    
| Subject_Name  |    
+---------------+    
|  Physics      |        
|  Chemistry    |   
|  Mathematics  |
+---------------+
1_信息

+---------------+-------+    
| Subject_Name  | Marks |     
+---------------+-------|    
|  Physics      |  60   |   
|  Chemistry    |  40   |
|  Mathematics  |  80   |
+---------------+-------+
2_信息

+---------------+-------+    
| Subject_Name  | Marks |     
+---------------+-------|    
|  Physics      |  70   |   
|  Chemistry    |  50   |
|  Mathematics  |  60   |
+---------------+-------+
3_信息

+---------------+-------+    
| Subject_Name  | Marks |     
+---------------+-------|    
|  Physics      |  70   |   
|  Chemistry    |  70   |
|  Mathematics  |  70   |
+---------------+-------+
这里的表1、2、3分别对应于Id=1、Id=2、Id=3的学生

我的问题是

  • 如果我在科目信息表中插入科目名称,我必须在每个学生对应的所有单独表格中插入相同的科目名称(1个科目信息、2个科目信息、3个科目信息)
  • 我使用以下查询获取表名;它很好用

    SELECT CONCAT(Id, '_Info') FROM Student_Info;
    
    我试图用这样一个查询来编写它

    INSERT INTO (SELECT CONCAT(Id, '_Info') FROM Student_Info) VALUES ('Physics');
    
    但这是一个错误

    是否可以在单个查询中执行此操作

    如果是,那么我在哪里犯了错误

  • 我在这里为每个学生主题相关参数(1\u信息、2\u信息等)使用的表格命名是一种好方法吗?如果没有,请建议一个好方法

  • 我认为将信息放在一个表中会更容易,例如

    Student
    +----+--------+    
    | Id | Name   |    
    +----+--------+    
    |  1 | Sam    |        
    |  2 | Taylor |   
    |  3 | Rick   |
    +----+--------+
    
    
    Subject
    +----+-------------+    
    | Id | Subject     |    
    +----+-------------+    
    |  1 | Physics     |        
    |  2 | Chemistry   |   
    |  3 | Mathematics |
    +----+-------------+
    
    Info
    +------------+------------+-------+    
    | student_id | subject_id | Marks |    
    +------------+------------+-------+    
    | 1          | 1          | 60    |
    | 1          | 2          | 40    |
    | 1          | 3          | 80    |
    | 2          | 1          | 70    |
    | 2          | 2          | 50    |
    | 2          | 3          | 60    |
    | 3          | 1          | 70    |
    | 3          | 2          | 70    |
    | 3          | 3          | 70    |
    +------------+------------+-------+
    
    插页应该是

    INSERT INTO Student(Name) VALUES('Tom');
    
    INSERT INTO Subject(Subject) VALUES('History');
    
    INSERT INTO Info(4, 4, 80);
    
    编辑:或者,我认为这就是所谓的“第三范式(3NF)”


    请展示您的表格结构hi@muhammaduazzam,谢谢您的回复。我的工作台不同,不能在这里显示。我在这里给出的示例同样与我的工作表相关。你能告诉我你到底在问什么吗?嗨@domacs,谢谢你的回复。但我问了不同的问题。你能回答他们吗?如果您能帮我解决我的问题,我将非常高兴。对不起,我不是100%的舒尔,但我认为这样做是不可能的,所以我回复了您2。pointHi@domacs,这里我只给你展示了一个例子。但我的实际表相当大,我在某个地方读到过这样的信息:有更小的表,列数更少,重复数据更少,这是很好的。你的回答与这条规则相矛盾。你能推荐一些更好、更好的方法吗?再次感谢。我的回答是确认这条规则,你可以在第四张表中加上标记和ID,然后只在信息表中加上ID。将所有数据放在一个表中并一直重复某些列(如PhysicsHi@domacs)是错误的,请详细说明您之前创建第四个表的观点好吗?我不明白。
    Student
    +----+--------+    
    | Id | Name   |    
    +----+--------+    
    |  1 | Sam    |        
    |  2 | Taylor |   
    |  3 | Rick   |
    +----+--------+
    
    
    Subject
    +----+-------------+    
    | Id | Subject     |    
    +----+-------------+    
    |  1 | Physics     |        
    |  2 | Chemistry   |   
    |  3 | Mathematics |
    +----+-------------+
    
    Marks
    +----+------+    
    | Id | Mark |    
    +----+------+    
    |  1 | 60   |        
    |  2 | 40   |   
    |  3 | 80   |
    |  4 | 70   |
    |  5 | 50   |
    +----+------+
    
    Info
    +------------+------------+---------+    
    | student_id | subject_id | mark_id |    
    +------------+------------+---------+    
    | 1          | 1          | 1       |
    | 1          | 2          | 2       |
    | 1          | 3          | 3       |
    | 2          | 1          | 4       |
    | 2          | 2          | 5       |
    | 2          | 3          | 1       |
    | 3          | 1          | 4       |
    | 3          | 2          | 4       |
    | 3          | 3          | 4       |
    +------------+------------+---------+