У меня проблема с моим procedure
. У меня есть таблица oferty_in
, которая содержит поля (id, status, ..., id_om). Я хочу процедуру, которая проверяет if exist
строки с тем же id_om
.
Если существует, удалите строки where status = 'N'
(N - новый).
Моя процедура почти работает, но у меня проблема с повторением в цикле. Каждый раз, когда я запускаю свою процедуру, процедура удаляет половину строк. Я не знаю, где проблема ...
DELIMITER //
CREATE PROCEDURE check_duplicates_oferty_in()
BEGIN
DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
DECLARE v_id_del BIGINT;
SELECT count(*) INTO n FROM oferty_in where status_oferty = 'N';
SET i=0;
WHILE i<n DO
IF EXISTS (SELECT id_om FROM oferty_in group by id_om having count(*) >= 2 LIMIT i,1) THEN
SELECT id_om INTO v_id_del FROM oferty_in group by id_om having count(*) >= 2 LIMIT i,1;
DELETE from oferty_in where id_om = v_id_del and status_oferty = 'N';
END IF;
SET i=i+1;
END WHILE;
END
//
Я также пытаюсь:
IF EXISTS (SELECT id_om FROM oferty_in group by id_om having count(*) >= 2 LIMIT i,1) THEN
SELECT id_om INTO v_id_del FROM oferty_in group by id_om having count(*) >= 2 LIMIT i,1;
DELETE from oferty_in where id_om = v_id_del and status_oferty = 'N';
SET i=i+1;
ELSE
SET i=i+1;
END IF;
Но это то же самое.
Каждый раз половина рядов. Я использую счетчик 'i' и while loop
для итераций строка за строкой в oferty_in
, когда status = 'N'
. У кого-нибудь есть идея, что я сделал не так? Спасибо за помощь и время.