修改MySQL INSERT语句以省略某些行的插入

修改MySQL INSERT语句以省略某些行的插入,mysql,variables,insert,temp-tables,Mysql,Variables,Insert,Temp Tables,我试图对上周我得到帮助的一份声明做一点扩展。如您所见,我正在设置一个临时表,并插入最近为几十所学校管理的测试中的学生数据行。插入行时,它们按得分totpct_stu、从高到低排序,并添加行数,1表示最高得分,以此类推 我了解到9999学校史密斯班上有一些问题,每个学生都取得了满分,他们是这个地区唯一这样做的学生。所以,我不想导入SMITH的类 如你所见,我删除了史密斯的班级,但这弄乱了学校其他学生的行号。例如,高分的行号现在是20,而不是1 如何修改INSERT语句以避免插入此类 DROP TE

我试图对上周我得到帮助的一份声明做一点扩展。如您所见,我正在设置一个临时表,并插入最近为几十所学校管理的测试中的学生数据行。插入行时,它们按得分totpct_stu、从高到低排序,并添加行数,1表示最高得分,以此类推

我了解到9999学校史密斯班上有一些问题,每个学生都取得了满分,他们是这个地区唯一这样做的学生。所以,我不想导入SMITH的类

如你所见,我删除了史密斯的班级,但这弄乱了学校其他学生的行号。例如,高分的行号现在是20,而不是1

如何修改INSERT语句以避免插入此类

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')