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