sql - 根据其他表数据向表中添加行
问题描述
我正在尝试创建一个从其他表中提取数据的表。
以我为例,我有 5 个学生。每个学生学生参加 3 个科目(数学、英语和科学)每个科目有 3 个测试。这意味着所有 5 名学生在 3 门科目中每人总共参加 9 次考试。
我已经创建了学生表、主题表和测试表。我现在正在尝试创建 Student_Results 表,我需要在一个表中为所有 5 名学生进行所有 9 次测试,该表将显示他们给定的测试结果。
我一直在努力做到这一点。
请参阅我在下面创建的表格。
CREATE TABLE DBO.STUDENTS
(
STUDENT_ID VARCHAR(15) PRIMARY KEY,
STUDENT_FIRSTNAME VARCHAR(255) NOT NULL,
STUDENT_SURNAME VARCHAR(255) NOT NULL,
STUDENT_SCORE_AVERAGE VARCHAR(30)
);
-- Creating the 'Subjects' Table
CREATE TABLE DBO.SUBJECTS
(
SUBJECT_ID VARCHAR(12) PRIMARY KEY,
SUBJECT_NAME VARCHAR(30) NOT NULL,
SUBJECT_AVERAGE VARCHAR(30)
);
-- Creating the 'Tests' Table
CREATE TABLE DBO.TESTS
(
TEST_ID VARCHAR(12) PRIMARY KEY,
TEST_NAME VARCHAR(30) NOT NULL,
TEST_DESCRIPTION VARCHAR(50),
TEST_AVERAGE VARCHAR(3)
);
-- Creating the 'Student_Score' Table
CREATE TABLE DBO.STUDENT_SCORES
(
RESULT_ID VARCHAR (12) PRIMARY KEY,
STUDENT_ID VARCHAR(12) ,
TEST_ID VARCHAR(12),
STUDENT_SCORE VARCHAR(30)
);
create table #TempStudent
(
STUDENT_KEY INT identity (10000000,1),
STUDENT_ID AS CONCAT('STD',STUDENT_KEY),
STUDENT_FIRSTNAME VARCHAR(255),
STUDENT_SURNAME VARCHAR(255)
)
INSERT INTO #TempStudent
VALUES ( 'Daenerys' , 'Targaryen' ),
( 'Jon' , 'Snow' ),
( 'Gregor' , 'Clegane' ),
( 'Arya' , 'Stark' ),
( 'Cersei' , 'Lannister' )
INSERT INTO STUDENTS (STUDENT_ID, STUDENT_FIRSTNAME , STUDENT_SURNAME)
SELECT STUDENT_ID, STUDENT_FIRSTNAME, STUDENT_SURNAME
FROM #TempStudent
create table #TempSubject
(
SUBJECT_KEY INT identity (10000000,1),
SUBJECT_ID AS CONCAT('SUB',SUBJECT_KEY),
SUBJECT_NAME VARCHAR(255)
)
INSERT INTO #TempSubject
VALUES ('Maths'),
('Science'),
('English')
INSERT INTO SUBJECTS (SUBJECT_ID, SUBJECT_NAME )
SELECT SUBJECT_ID, SUBJECT_NAME
FROM #TempSubject
create table #TempTest
(
TEST_KEY INT identity (100,1),
TEST_ID AS CONCAT('TST',TEST_KEY),
TEST_NAME VARCHAR(255),
TEST_DESCRIPTION VARCHAR(255)
)
INSERT INTO #TempTest
VALUES ('Maths 1', 'Geometry'),
('Maths 2', 'Algebra'),
('Maths 3', 'Fractions'),
('Science 1', 'Astronomy'),
('Science 2', 'Biology'),
('Science 3', 'Chemistry'),
('English 1', 'Grammer'),
('English 2', 'Spelling'),
('English 3', 'Literature')
INSERT INTO TESTS(TEST_ID, TEST_NAME , TEST_DESCRIPTION )
SELECT TEST_ID, TEST_NAME, TEST_DESCRIPTION
FROM #TempTest
create table #TempScoreSubmission
(
SCORE_KEY INT identity (1234,1),
RESULT_ID AS CONCAT('RES',SCORE_KEY)
)
解决方案
我不知道你想把所有这些临时表放在哪里,为什么不直接用主键作为身份创建实际表并直接插入它们......但是要获取所有对学生 ID 和测试ID可以使用交叉连接。我相信这就是你正在寻找的。
SELECT s.student_id,
t.test_id
FROM dbo.students s
CROSS JOIN dbo.tests t;
推荐阅读
- python-3.x - 有什么作用!在 Python 中是什么意思?
- python - 如何使用 TD Ameritrade api 使用 python 创建监视列表?
- python - gpflow 示例中的 2D 实现和获取 MAE、RMSE 错误
- c++ - 如果我们为 const integer 分配这样的值可以吗?
- python-3.x - 为什么我的 Pygame 窗口背景无法加载?
- python - 一种保护数据库中密码的简单方法
- android-studio - 在android studio中构建失败,没有任何错误
- java - 解决转帐逻辑
- python - 通过遵循 Python 中值的特定路径替换嵌套字典中的值
- javascript - 在滚动时调整大小的矩形过渡被切断