修改MySQL INSERT语句以省略某些行的插入
我试图对上周我得到帮助的一份声明做一点扩展。如您所见,我正在设置一个临时表,并插入最近为几十所学校管理的测试中的学生数据行。插入行时,它们按得分totpct_stu、从高到低排序,并添加行数,1表示最高得分,以此类推 我了解到9999学校史密斯班上有一些问题,每个学生都取得了满分,他们是这个地区唯一这样做的学生。所以,我不想导入SMITH的类 如你所见,我删除了史密斯的班级,但这弄乱了学校其他学生的行号。例如,高分的行号现在是20,而不是1 如何修改INSERT语句以避免插入此类修改MySQL INSERT语句以省略某些行的插入,mysql,variables,insert,temp-tables,Mysql,Variables,Insert,Temp Tables,我试图对上周我得到帮助的一份声明做一点扩展。如您所见,我正在设置一个临时表,并插入最近为几十所学校管理的测试中的学生数据行。插入行时,它们按得分totpct_stu、从高到低排序,并添加行数,1表示最高得分,以此类推 我了解到9999学校史密斯班上有一些问题,每个学生都取得了满分,他们是这个地区唯一这样做的学生。所以,我不想导入SMITH的类 如你所见,我删除了史密斯的班级,但这弄乱了学校其他学生的行号。例如,高分的行号现在是20,而不是1 如何修改INSERT语句以避免插入此类 DROP TE
DROP TEMPORARY TABLE IF EXISTS avgpct ;
CREATE TEMPORARY TABLE avgpct_1
( sch_code VARCHAR(3),
schabbrev VARCHAR(75),
teachername VARCHAR(75),
totpct_stu DECIMAL(5,1),
row_number SMALLINT,
dummy VARCHAR(75)
);
-- ----------------------------------------
INSERT INTO avgpct
SELECT sch_code
, schabbrev
, teachername
, totpct_stu
, @num := IF( @GROUP = schabbrev, @num + 1, 1 ) AS row_number
, @GROUP := schabbrev AS dummy
FROM sci_rpt
WHERE grade = '05' AND
totpct_stu >= 1 -- has a valid score
ORDER
BY sch_code, totpct_stu DESC ;
-- ---------------------------------------
-- select * from avgpct ;
-- ---------------------------------------
DELETE
FROM avgpct_1
WHERE sch_code = '9999' AND
teachername = 'SMITH' ;
沿着这条思路的一些东西可能会奏效。在测试环境中,更改此选项
WHERE grade = '05' AND
totpct_stu >= 1 -- has a valid score
对此
WHERE grade = '05' AND
totpct_stu >= 1 AND NOT -- has a valid score
(sch_code = '9999' AND teachername = 'SMITH')
但是,如果我是你,我会认为排除是一个反复出现的问题。可能不频繁,但经常重复。这将建议使用基于表的方法将要排除的内容存储在表中,而不是存储在SQL语句中。好吧,就是这样。我试过下面的方法,但问题被抛到了空中,无法停止。谢谢其中等级='05'和totpct_stu>=1,不在sci_rpt的select*中,其中sch_代码='9999',教师姓名='SMITH'…谢谢!是的,到目前为止我只做过一次,但我同意你的看法。
WHERE grade = '05' AND
totpct_stu >= 1 AND NOT -- has a valid score
(sch_code = '9999' AND teachername = 'SMITH')