Страница 1 из 1

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

Добавлено: 17 ноя 2006, 13:14
stepan96
Существует таблица в которой около миллиона записей. В ней необходимо удалить практически все записи. 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
Есть маленькая проблема: не работает :-) Пожалуйста ткните меня носом, где ошибка.

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

Добавлено: 17 ноя 2006, 15:09
mdfv
А чем стандартные методы не подходят?

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

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 ) 

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

Спасибо

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

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