【发布时间】:2021-10-29 14:10:31
【问题描述】:
我有三个表,如下所示。 topic_table 将通过插入来自 grades_table 和 subject_table 的值以及作为输入(主题名称)或计算(修订日期)的一些其他字段来创建。
成绩表
| grade_id | grades | sections |
|---|---|---|
| 1 | 1 | A |
| 2 | 1 | B |
subjects_table
| subject_id | grade_id | teacher_id | subject_name |
|---|---|---|---|
| 1 | 1 | 1 | Maths |
| 2 | 2 | 2 | English |
topics_table(注意:此表当前为空)。
我想将成绩和科目表中的grade_id 和subject_id 的值添加到该表中。基本上,我正在考虑加入主题表和成绩表,并从中提取所需的值,并将其放在此表中的成绩 id 和主题 id 列下,同时还输入来自用户的 topic_name 和来自系统的修订日期。
| topic_id | grade_id | subject_id | topic_name | revision_one | revision_two | revision_three |
|---|---|---|---|---|---|---|
| 1 | 1 | 1 | Adding Fractions | 28-10-2021 | 28-11-2021 | 28-12-2021 |
| 2 | 2 | 2 | Nouns | 01-11-2021 | 01-12-2021 | 01-01-2022 |
现在,我正在使用 join 在 topic_table 中插入grade_id 和 subject_id 的值,但问题是我无法接收 topic_name 和修订日期,因为它们是无法从另一个表中获取的额外列使用连接。 下面是我现在用来获取topics_table 的MySQL 查询。它只给出grade_id 和subject_id。
如何获得额外的列?
请注意,当输入 topic_name 时,每次使用相同的查询都会更新此表。
这里,$chooseGrade、$chooseSubject、$chooseSection 是我将通过表单从用户那里收到的输入。 $teacherId 是使用不同的查询从另一个表接收到的。
如果有其他方法可以从成绩表和科目表中获取值并将其放入主题表中,请告诉我。我尝试使用 SQL 变量,但即使这样也没有用。代码也给出了。
INSERT INTO topics_table (subject_id, grade_id, $topicName , CURRENT_DATE(),CURRENT_DATE()+INTERVAL 1 DAY,CURRENT_DATE()+INTERVAL 7 DAY,CURRENT_DATE()+INTERVAL 30 DAY,CURRENT_DATE()+INTERVAL 90 DAY,CURRENT_DATE()+ INTERVAL 180 DAY)
SELECT G.grade_id, S.subject_id
FROM grades_table G
INNER JOIN subjects_table S
WHERE G.grade_id = S.subject_id
AND G.grades = $chooseGrade
AND G.sections = $chooseSection
AND S.subject_name = $chooseSubject
AND S.teacher_id = $teacherId
//using variables NOT joins
SELECT grade_id INTO @grade_id FROM grades_table WHERE grades = '$chooseGrade' AND sections = '$chooseSection';
SELECT subject_id INTO @subject_id FROM subjects_table WHERE grade_id = @grade_id AND subject_name = '$chooseSubject' AND teacher_id = '$teacherId';
INSERT INTO topics_table ( subject_id, grade_id, topic_name, revision_one, revision_two, revision_three) VALUES (@subject_id, @grade_id,'$topicName',CURRENT_DATE()+INTERVAL 30 DAY,CURRENT_DATE()+INTERVAL 60 DAY,CURRENT_DATE()+ INTERVAL 90 DAY);
【问题讨论】:
标签: mysql sql join inner-join