Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 И снова DELETE, хотя впрочем и не он  [new]
PyroTechnic
Member

Откуда:
Сообщений: 155
Прошу тысяч извинений, я в Фоксе человек новенький, поэтому вопрос у меня глупенький:
Есть две взаимосвязанные таблицы. Связка по 4-м полям, из которых два - строковые, одно числовое и одно дата. Мне нужно из одной таблицы удалить те строчки, которых нет в другой. Будь это оракул, я бы написал:
DELETE...
WHERE NOT EXISTS (SELECT...)
Но в 8-м Фоксе я не нашел экзиста. Как быть? неужто придется складывать поля и сравнивать их суммы? (ну типа f1+dtoc(f2)+...)
6 июн 06, 00:52    [2743354]     Ответить | Цитировать Сообщить модератору
 Re: И снова DELETE, хотя впрочем и не он  [new]
Владимир СА
Member

Откуда:
Сообщений: 7881
Он есть. См. Help: SELECT - SQL Command (Example 6)
...
EXISTS ; 
(SELECT * FROM orders WHERE customer.postalcode =    orders.postalcode)
6 июн 06, 06:44    [2743484]     Ответить | Цитировать Сообщить модератору
 Re: И снова DELETE, хотя впрочем и не он  [new]
PyroTechnic
Member

Откуда:
Сообщений: 155
Но с DELETE как-то не фурычит - syntax error пишет (может конструкция NOT EXISTS в Фоксе не существует?) В принципе, я свою мыслю по поводу суммы полей опробовал - работает, объемы данных мизерные (программа по убору "мусора" из таблиц перед погрузкой их в Оракул), так что на производительности сильно не сказывается (точнее не сказывается вааще:-))
7 июн 06, 00:03    [2747509]     Ответить | Цитировать Сообщить модератору
 Re: И снова DELETE, хотя впрочем и не он  [new]
Igor Korolyov
Member

Откуда: Гомель, Беларусь
Сообщений: 2512

Hi PyroTechnic!

В VFP8 всё замечательно работает

CREATE CURSOR c1 (n1 I, n2 C(10))
CREATE CURSOR c2 (n1 I, n2 C(10))
* наполняем чем угодно
DELETE FROM c1 WHERE NOT EXISTS (SELECT * FROM c2 WHERE c2.n1 = c1.n1 AND
c2.n2 = c1.n2)
* отмечает на удаление все "отличающиеся" записи

Так что ищи ошибку в другом месте.

Хотя возможно что для твоей задачи подойдёт и более простой вариант - не
удалять, а выбрать в новый курсор (можно и в таблицу) те записи которые
нужны - в данном случае "одинаковые" - т.е. WHERE EXISTS (...) или даже
просто результат INNER JOIN между этими 2-мя таблицами по всем 4
интересующим полям.

Posted via ActualForum NNTP Server 1.3

8 июн 06, 03:00    [2752053]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить