2014-01-12 54 views
-1

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

+0

最后使用* LIMIT *。 – kashan

+0

请问你能更具体吗?我尝试了“LIMIT 1”,“LIMIT = 1”和“FIRST 1 ROWS ONLY”,但是每次出现错误时,我的SQL命令都没有正确结束。我在最后一个括号之后添加了限制。 – redhat01

+0

DELETE FROM note_studenti WHERE nota =(SELECT MIN(note_studenti.nota)FROM note_studenti)limit 1 – kashan

回答

2

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

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

说实话,虽然我觉得上面会的工作,我不积极有关如何rownum将与其他条件的wheredelete声明互动。

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

@a_horse_with_no_name。 。 。一点也不。这已被固定为'rownum = 1'。 –

0

DELETE FROM note_studenti WHERE ROWID =(SELECT MIN(ROWID)FROM note_studenti WHERE NOTA =(SELECT MIN(note_studenti.nota)FROM note_studenti));