Как запустить более 24 значений в visual foxpro в предложении In?

Я использую foxpro 5.0

У меня есть более 3000 записей для выполнения запроса. Например, мой запрос

delete from mytable.dbf where fieldname not in (1,2,3,......3909)

Он не будет выполняться. Поскольку foxpro допускает только 24 записи в предложении In. Как я могу выполнить этот запрос?
Любые идеи по упрощению.


person svk    schedule 28.03.2011    source источник
comment
Вставьте записи во временную таблицу и запустите удаление с помощью соединения. Или удалите их партиями по 24. Или, может быть... где имя поля не в (1,2,...,24) и имя поля не в (25,26,..48) и...   -  person Tim Williams    schedule 28.03.2011
comment
Я написал так delete from table1.dbf a join table2.DBF b on b.field ! =a.field but it throws an error Но я горю результат для select a.* from table1.dbf a join table2 b on b.field=a.fields любой идеи   -  person svk    schedule 28.03.2011


Ответы (2)


Следующий код демонстрирует, как вы можете удалять записи в одной таблице на основе записей в другой таблице.

CREATE CURSOR Table1 (pk I)
INSERT INTO Table1 (pk) VALUES(1)
INSERT INTO Table1 (pk) VALUES(2)
INSERT INTO Table1 (pk) VALUES(3)
INSERT INTO Table1 (pk) VALUES(4)
INSERT INTO Table1 (pk) VALUES(5)

CREATE CURSOR Table2 (pk I)
INSERT INTO Table2 (pk) VALUES(2)
INSERT INTO Table2 (pk) VALUES(4)


DELETE FROM Table1 WHERE Table1.pk IN (SELECT Table2.pk FROM Table2)
person Frank Perez    schedule 28.03.2011

Вы можете попробовать изучить функцию SYS(3055), которая позволяет регулировать сложность, разрешенную в предложениях FOR и WHERE.

Однако я бы получил список значений имени поля, которые вы хотите сохранить во временном курсоре, скажем, под названием «_keep», а затем выполните:

Delete From mytable where fieldname not in (select fieldname from _keep)
Use In Select("_keep")
person Alan B    schedule 28.03.2011