Mysql 插入到从子查询派生表名的表中
我有一个名为Student_Info table、Subject_Info table的表,以及一个属于每个学生的单独表,其中包含该学生的每个主题参数的信息(如主题名称、他在该主题中获得的分数等) 学生信息Mysql 插入到从子查询派生表名的表中,mysql,Mysql,我有一个名为Student_Info table、Subject_Info table的表,以及一个属于每个学生的单独表,其中包含该学生的每个主题参数的信息(如主题名称、他在该主题中获得的分数等) 学生信息 +----+----------+ | Id | Name | +----+----------+ | 1 | Sam | | 2 | Taylor | | 3 | Rick | +----+---------
+----+----------+
| 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的学生
我的问题是
SELECT CONCAT(Id, '_Info') FROM Student_Info;
我试图用这样一个查询来编写它
INSERT INTO (SELECT CONCAT(Id, '_Info') FROM Student_Info) VALUES ('Physics');
但这是一个错误
是否可以在单个查询中执行此操作
如果是,那么我在哪里犯了错误
我认为将信息放在一个表中会更容易,例如
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 |
+------------+------------+---------+