2014-01-12 3 views
-1

У меня есть пример, который не может понять. Приведенный ниже код выбирает имя и оценки для всех студентов из моей базы данных. Я хочу создать скрипт, который удалит наименьший класс каждого ученика. BUT, если наименьший класс 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 будет взаимодействовать с другим условием в where в delete заявлении.

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 ГДЕ ROWID = (SELECT MIN (ROWID) ОТ note_studenti ГДЕ Nota = (SELECT MIN (note_studenti.nota) FROM note_studenti));

Смежные вопросы