删除最小值

时间:2014-01-12 10:35:45

标签: sql oracle

我有一个无法理解的例子。 以下代码是从我的数据库中选择所有学生的姓名和成绩。 我想创建一个删除每个学生最小成绩的脚本。 但是如果最小成绩是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:我想出了如何删除最小的成绩。 现在我只需要删除一行,而不是全部。

2 个答案:

答案 0 :(得分:2)

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

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

说实话,虽然我认为以上内容会有效,但我对rownum如何与where语句中delete中的其他条件进行互动并不是肯定的。

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

答案 1 :(得分:0)

从note_studenti删除 WHERE ROWID =(SELECT MIN(ROWID)FROM note_studenti                 WHERE nota =(SELECT MIN(note_studenti.nota)FROM note_studenti));