Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL запрос / 13 сообщений из 13, страница 1 из 1
18.01.2011, 13:30
    #37064441
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
есть две таблицы
табл1
t1p1123
табл2, связана с первой по полю t1p1
t2p1t1p1t2p2111221312422532
Надо удалить из первой таблицы только те записи, у которых в табл2 поле t2p2=2, но если во второй таблице есть ссылки на эти записи, кроме t2p2=2, то их надо оставить(блин голову сломал, пока написал, и всё равно не понял), короче , надо в первой таблице удалить только запись с кодом 3, так как кода 1 и 2, присутствуют во второй таблице, не только t2p2=2, но и t2p2=1...
...
Рейтинг: 0 / 0
18.01.2011, 13:42
    #37064488
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
как-то так
Код: plaintext
delete from t1 where t1p1 in (select distinct t1p1 from t2 where t2p2 =  2  and t1p1 not in (select distinct t1p1 from t2 where t2p2 !=  2 ))
...
Рейтинг: 0 / 0
18.01.2011, 14:37
    #37064646
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Условие "читается" так:

1. Есть записи с кодом t2.p2=2
2. Нет записей с кодом t2.p2<>2

Факт существования или не существования определяется подзапросом EXISTS(), значит, получаем такой запрос

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
* Тестовые данные
Create Cursor t1 (p1 i)
Insert into t1 values ( 1 )
Insert into t1 values ( 2 )
Insert into t1 values ( 3 )

Create Cursor t2 (p1 i, p2 i)
Insert into t2 values ( 1 , 1 )
Insert into t2 values ( 2 , 1 )
Insert into t2 values ( 3 , 2 )
Insert into t2 values ( 4 , 2 )
Insert into t2 values ( 5 , 2 )

* Удаление
delete t1 ;
from t2 ;
where t2.p1 = t1.p1 ;
	and t2.p2 =  2  ;
	and not EXISTS(select  1  from t2 tt where tt.p1 = t2.p1 and tt.p2<> 2 )

* Смотрим, что получилось
select t1
go top
browse nowait

Обратите внимание, что в подзапросе EXISTS связывается таблица t2 сама с собой, поскольку в директиве FROM указана только таблица t2.
...
Рейтинг: 0 / 0
18.01.2011, 14:39
    #37064649
прошелмимо
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
сходи лучше на фоксклаб, отметься
http://forum.foxclub.ru/read.php?29,490876,page=2

там ДЕ формы дурацким обозвали
...
Рейтинг: 0 / 0
18.01.2011, 19:26
    #37065337
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Чего сказать, просто любители пользоваться (или изображать из себя) знатоков SQL.
...
Рейтинг: 0 / 0
19.01.2011, 05:22
    #37065821
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
спасибо, правда что-то два последних сообщения не догоняю..., при чём тут DE(DataEnvironment), посмотрел ссылку, ясности не добавило, и вообще не причисляю себя ни к фанатам DE,CA, SQL-запросов и любителей циклов, где что удобней, то и применяю в циклах запросы, запросы зацикливаю...люблю пользоваться индексами и использовать в конструкциях (delete, count, sum...) опцию while, чтоб не сканировать всю таблицу...но иногда приходится прибегать к SQL(это как вечный вопрос, что лучше и когда: seek или locate, seek быстрее, но Locate удобней и больше возможностей...)...что-то меня понесло
:-))..ещё раз спасибо...
...
Рейтинг: 0 / 0
19.01.2011, 07:02
    #37065849
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
ВладимирМ,

что-то продолжил таблицы t1 и t2,
Insert into t1 values (4)
Insert into t1 values (5)
Insert into t2 values (6,4)
Insert into t2 values (7,5)
Так по этой конструкции sql-удаления она удалила эти записи в t1, хотя они должны были остаться не удалёнными...
t2p1t1p1t2p2111 221312 422 532643753
Просто хотелось объяснить как можно проще и понятней, но вышло, как всегда...
t1p1 это код субъекта;t2p2 это код договора, так вот надо удалить этих субъектов из t1, у кого в t2(промежуточная таблица между субъек. и договорами), больше нет договоров..., т.е. при удалении договора 2 (t2p2=2), мы должны удалить всех субъектов которые отмечены в этом договоре и не встречаются в других договорах...о, пока писал всё разложилось по полочкам... наверное и пишут не только чтоб ответили, но и самому понять, а если и ответят, то это вообще будет счастье...:-)))
...
Рейтинг: 0 / 0
19.01.2011, 07:19
    #37065856
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
q1w1e1 наверное и пишут не только чтоб ответили, но и самому понять, а если и ответят, то это вообще будет счастье...:-)))
Чукча писатель однако
Ты мой пост смотрел? я тебе как удалить написал. селект выбирает что удалить надо.
...
Рейтинг: 0 / 0
19.01.2011, 07:26
    #37065860
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
q1w1e1т.е. при удалении договора 2 (t2p2=2), мы должны удалить всех субъектов которые отмечены в этом договоре и не встречаются в других договорах...
Если так, то ты не стой стороны задачу решаешь.
Надо сначала удалить все ссылки на договор, а потом удалять договор и субъектов, на которых нет ссылок.
...
Рейтинг: 0 / 0
19.01.2011, 07:36
    #37065864
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Dima T,

Смотрю, однако, пытаюсь понять, протестировать на граничные условия..., спасибо...
...
Рейтинг: 0 / 0
19.01.2011, 07:47
    #37065868
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
Dima T,

У меня так и было в начале, удалял в промежуточной базе ссылки, а потом из субъектов,, но там где-то закралась ошибка, что спустя полгода трудно восстановить, и решая в срочном порядке, чем искать ошибку, делаем десять новых ошибок, и пошла цепная реакция...:-)
...
Рейтинг: 0 / 0
19.01.2011, 08:24
    #37065884
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
q1w1e1Dima T,

У меня так и было в начале, удалял в промежуточной базе ссылки, а потом из субъектов,, но там где-то закралась ошибка, что спустя полгода трудно восстановить, и решая в срочном порядке, чем искать ошибку, делаем десять новых ошибок, и пошла цепная реакция...:-)
Это не повод начать решать задачу заведомо не с той стороны. Удали подвисшие субъекты без ссылок, сделай проверку наличия таких записей и ищи ошибку в своем коде.
...
Рейтинг: 0 / 0
19.01.2011, 09:00
    #37065912
q1w1e1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL запрос
ошибки в коде нет, я останавливаю программу перед удалением, копирую из дебуггера в коммандное окно этот delete from заменяю на select *, чтоб посмотреть, удаляемые записи, в начале включаются посторонние записи, потом опять этот select и всё нормально, как и должно быть(видать курсор сдвигается...)... вот смотрю relation, фильтры, set key, хотя по идее Sql -не должен это учитывать...
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SQL запрос / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]