Удаление записей

Модераторы: kdv, CyberMax

Ответить
stepan96
Сообщения: 12
Зарегистрирован: 15 сен 2005, 11:52

Удаление записей

Сообщение stepan96 » 17 ноя 2006, 13:14

Существует таблица в которой около миллиона записей. В ней необходимо удалить практически все записи. ID записей, которые НЕ НАДО УДАЛЯТЬ находятся во второй таблице. Количество записей во второй таблице около 200 000. Сервер IB 7
Пытаюсь сделать удаление с помощью ХП. Код ниже:

Код: Выделить всё

CREATE PROCEDURE DELETE_RECORDS
AS
DECLARE VARIABLE RECORD_ID INTEGER;
DECLARE VARIABLE CC INTEGER;
BEGIN
  FOR SELECT ID
  FROM RECORDS INTO :RECORD_ID DO
  BEGIN
    SELECT
      count(*)
    FROM
      NOTDELETED
    WHERE
      NOTDELETED.ID = :RECORD_ID
    INTO :CC;
    IF (CC = 0) THEN
      DELETE FROM
        RECORDS
      WHERE
        RECORDS.ID = :RECORD_ID;
  END
END
Есть маленькая проблема: не работает :-) Пожалуйста ткните меня носом, где ошибка.

Заранее спасибо

mdfv
Сообщения: 119
Зарегистрирован: 23 май 2006, 15:53

Сообщение mdfv » 17 ноя 2006, 15:09

А чем стандартные методы не подходят?

Код: Выделить всё

DELETE FROM
        RECORDS
      WHERE
       not Exists (select NOTDELETED.ID from NOTDELETED where NOTDELETED.ID=RECORDS.ID) 
или

Код: Выделить всё

DELETE FROM
        RECORDS
      WHERE
       not ID in (select ID from NOTDELETED ) 

stepan96
Сообщения: 12
Зарегистрирован: 15 сен 2005, 11:52

Сообщение stepan96 » 17 ноя 2006, 15:36

Насколько я знаю, конструкция IN применяется для наборов не превышающих 1500 элементов, а у меня их 200 тысяч. А вот насчет EXISTS я чтото не подумал :-)

Спасибо

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 17 ноя 2006, 18:23

stepan96 писал(а):Насколько я знаю, конструкция IN применяется для наборов не превышающих 1500 элементов, а у меня их 200 тысяч.
А ты попробуй.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 17 ноя 2006, 20:17

конструкция IN применяется для наборов не превышающих 1500 элементов
это если эти элементы явно перечислены. А если подзапрос - то никаких ограничений нет.
Вот любят люди всякую фигню придумывать...

Ответить