MySql-在while循环中插入到表中
我有一个takes表,我想将每个成绩记录转换为数值,并将其存储在grade_point表中 我将grade_点初始化为: 创建表格(如果不存在)。大学成绩\ U点 瓦查尔5号, VARCHAR2级, 等级\数值2,1 ; 我可以通过以下方式处理此问题: 从表中获取id 从表格中获得分数 如果坡度为A,则坡度_值为4.0 如果等级为A,则等级_值为3.7 我可以编写以下查询: 插入到grade_pointid、grade、grade_值中 选择 身份证件 等级 案例 当等级为“A”时,则为4.0 当等级为“A-”时,则为3.7 当等级为“B+”时,则为3.3 当等级为“B”时,则为3.0 以等级\ U值结束 从…起 拿; 我想知道我是否可以用这个程序来做 受以下公认解决方案的启发: 对于takes表中的每个成绩记录 选择第i行 获取id、等级并将等级转换为等级值 将其插入坡率点 结果是: 分隔符 创建程序更新\等级\点 开始 声明n int默认值为0 声明i int默认值为0 从n中选择countgrade 集合i=0 而我 插入到grade_pointid、grade、grade_值中 选择id、等级、, 案例 当等级为“A”时,则为4.0 当等级为“A-”时,则为3.7 当等级为“B+”时,则为3.3 当等级为“B”时,则为3.0 以等级\ U值结束 从…起 拿 极限i,1; 设置i=i+1 结束时 终止 定界符; 但是,上述查询的答复如下: 0行受影响,1条警告:1050表“grade_point”已存在 当删除grade_point表并重新执行查询时,我有以下响应 0行受影响 未在坡度点表中插入任何内容 你能告诉我我的程序有什么遗漏或错误吗MySql-在while循环中插入到表中,mysql,Mysql,我有一个takes表,我想将每个成绩记录转换为数值,并将其存储在grade_point表中 我将grade_点初始化为: 创建表格(如果不存在)。大学成绩\ U点 瓦查尔5号, VARCHAR2级, 等级\数值2,1 ; 我可以通过以下方式处理此问题: 从表中获取id 从表格中获得分数 如果坡度为A,则坡度_值为4.0 如果等级为A,则等级_值为3.7 我可以编写以下查询: 插入到grade_pointid、grade、grade_值中 选择 身份证件 等级 案例 当等级为“A”时,则为4.0
问候。我不知道,既然一个简单的插入就足够了,为什么要这样做 但是ij是一个存储过程,可以使用循环
dbfiddle插入表名column1、column2、colmn3值value1、value2、value3是正确的插入语法。您没有输入任何值。为什么要替换完美、圆滑、基于设置且性能优异的插入。。。选择用一个缓慢而烦人的程序解决方案?再想一想:桌上的grade_点应该是什么样的?等级的数字和字母表示之间的关系?在这种情况下,您不想根据分数行填充它,而只是一次,每一个可能的分数都对应一行,而这些分数不一定当前存在于分数中。然后更改Takes,即grade是指向grade_point中记录的外键。是的,创建过程不会插入、更新或删除任何行。您需要执行该过程,以便其主体中的任何INSERT、UPDATE或DELETE语句都具有任何效果。你应该问这个问题。要弄清楚你拥有什么、想要什么以及问题出在哪里都有点困难。至少对我来说…@stickybit我试图想象书的问题,先生。这个问题与现实世界的问题无关。我目前正在为一个有问题的考试工作。谢谢你和我分享你的想法。Regard我不知道,你为什么要这么做,当一个简单的插入就足够了,我正在准备资格考试。考试社区可以问任何问题。无论如何,谢谢。虽然我不明白为什么dbfiddle会给我的语法带来错误。该查询在MySql Workbench.dbfiddle上运行良好,有一些查询,必须考虑查看,除了尝试下一次使用分隔符$$并添加分号外,它还使ebtter rad和MySql在接受您的样式时在dbfiddle中感到困惑我不知道会发生什么..在接受您的样式时感到困惑。。意思是说?如果分隔符没有实际字符,则通过DBFIDLE关闭其配置。dbfiddle.uk不喜欢分隔符,因为它会自动添加分隔符,正如您在fiddle中看到的那样。就像我说的,了解小提琴网站的所有规则需要一些时间。谢谢你提供的信息,我下次会小心的。当做
CREATE TABLE IF NOT EXISTS grade_point (
id VARCHAR(5),
grade VARCHAR(2),
grade_value NUMERIC(2 , 1)
);
CREATE TABLE IF NOT EXISTS takes (
id VARCHAR(5),
grade VARCHAR(2)
);
INSERT INTO takes VALUES ("1","A"),("2","B"),("3","A"),("4","B")
CREATE PROCEDURE update_grade_point (
)
BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE _grade varchar(2) DEFAULT "";
DECLARE _id varchar(5) DEFAULT "";
-- declare cursor for employee email
DEClARE curtakes
CURSOR FOR
SELECT id,grade FROM takes;
-- declare NOT FOUND handler
DECLARE CONTINUE HANDLER
FOR NOT FOUND SET finished = 1;
OPEN curtakes;
getidGrade: LOOP
FETCH curtakes INTO _id,_grade;
IF finished = 1 THEN
LEAVE getidGrade;
END IF;
insert into grade_point(id, grade, grade_value) VALUES (_id,_grade, case
when grade like 'A' then 4.0
when grade like 'A-' then 3.7
when grade like 'B+' then 3.3
when grade like 'B' then 3.0
end);
END LOOP getidGrade;
CLOSE curtakes;
END
CALL update_grade_point()
SELECT * FROM grade_point
id | grade | grade_value
:- | :---- | ----------:
1 | A | 4.0
2 | B | 3.0
3 | A | 4.0
4 | B | 3.0