删除最小值



我有一个无法理解的例子。下面的代码是从我的数据库中选择所有学生的姓名和成绩。我想创建一个脚本,该脚本将删除每个学生的最小成绩。但是,例如,如果最小的成绩是 3,而学生有 2 个 3 的成绩,我想只删除其中一个(随机或第一个,我不在乎,我不想为此制定规则);我在这里所做的工作正常,但删除了所有 3 年级。

 DECLARE 
     nume studenti.nume%TYPE;
     nota note_studenti.nota%TYPE;
     CURSOR myc IS SELECT nume, nota 
                     FROM studenti INNER JOIN note_studenti 
                       ON studenti.mat = note_studenti.mat;
 BEGIN
     OPEN myc;
     LOOP
         FETCH myc INTO nume, nota;
         EXIT WHEN myc%NOTFOUND;
     END LOOP;
     DELETE  FROM note_studenti WHERE nota = 
               (SELECT MIN(note_studenti.nota) FROM note_studenti);
     CLOSE myc;
 END;

LE:我想出了如何删除最小的等级。现在我只需要让它只删除一行,而不是全部。

这里有两种方法。 第一个使用rownum,第二个rowid

 DELETE FROM note_studenti
 WHERE nota = (SELECT MIN(note_studenti.nota) FROM note_studenti) and
       rownum = 1;

老实说,虽然我认为上述方法会起作用,但我并不肯定rownum如何在delete声明中与where中的其他条件相互作用。

 DELETE FROM note_studenti
 WHERE rowid = (select rowid
                from (select *
                      from note_studenti
                      order by note desc
                     ) ns
                where rownum = 1
               );

从note_studenti中删除其中 ROWID = (从note_studenti中选择最小(ROWID) 其中 NOTA = (从 note_studenti 中选择 MIN(note_studenti.nota)));

--你可以按限制的顺序执行此操作 -- 从note_studenti订单中删除

,限制为 1 ;

最新更新