我有一个无法理解的例子。 以下代码是从我的数据库中选择所有学生的姓名和成绩。 我想创建一个删除每个学生最小成绩的脚本。 但是如果最小成绩是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 :(得分: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));