Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / удаление записей / 12 сообщений из 12, страница 1 из 1
02.12.2010, 09:10
    #36990459
Makrosa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
ест две таблицы А и Б. связью один к многим. как можно одновременно удалить записи по определенному условию из таблицы А и вместе с ним удалить соответствующие записи из Б
...
Рейтинг: 0 / 0
02.12.2010, 10:07
    #36990563
удаление записей
Makrosaест две таблицы А и Б. связью один к многим. как можно одновременно удалить записи по определенному условию из таблицы А и вместе с ним удалить соответствующие записи из БОдновременно - никак. Команда delete в любом варианте удаляет данные только из одной таблицы. С помощью триггеров и касадных связей можно организовать "как бы" одновременное удаление, но внутри все равно будет две команды удаления.
...
Рейтинг: 0 / 0
02.12.2010, 11:57
    #36990844
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
Если таблицы в контейнере БД то можно транзакцию использовать. BEGIN TRAN ... END TRAN
...
Рейтинг: 0 / 0
02.12.2010, 12:08
    #36990874
удаление записей
Dima TЕсли таблицы в контейнере БД то можно транзакцию использовать. BEGIN TRAN ... END TRANТранзакция обеспечит "неделимость" пары команд, но количество команд от этого не изменится, пара останется парой.
...
Рейтинг: 0 / 0
02.12.2010, 12:39
    #36990946
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
проходящий.Dima TЕсли таблицы в контейнере БД то можно транзакцию использовать. BEGIN TRAN ... END TRANТранзакция обеспечит "неделимость" пары команд, но количество команд от этого не изменится, пара останется парой.
Количество команд увеличится, но реальное удаление произойдет одновременно в обоих таблицах по команде END TRAN.
...
Рейтинг: 0 / 0
02.12.2010, 15:06
    #36991395
Makrosa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
проходящий.Одновременно - никак. Команда delete в любом варианте удаляет данные только из одной таблицы. С помощью триггеров и касадных связей можно организовать "как бы" одновременное удаление, но внутри все равно будет две команды удаления.

а конкретно можно (например на этом примере)
...
Рейтинг: 0 / 0
02.12.2010, 15:25
    #36991457
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
Код: plaintext
1.
2.
3.
4.
lnDelId =  1 
BEGIN TRAN
delete From B1 where key_ind = lnDelId
delete From A1 where key_ind = lnDelId
END TRAN
...
Рейтинг: 0 / 0
02.12.2010, 21:30
    #36992187
Makrosa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
Makrosaкак можно одновременно удалить записи по определенному условию из таблицы А
наверное неправильно объяснил. я удаляю запись из таблицы А (неважно один или несколько). а из таблице Б самостоятельно должен удалится соответствующие ему записи (с помощью триггера или ...)
...
Рейтинг: 0 / 0
03.12.2010, 02:39
    #36992385
AndreTM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
И?
Всё упирается только в ваше слово "соответствующие", так что приходится напрягать телепатические способности.

Вариант: у вас нормализованные таблицы, тогда имеется что-то вроде tableB.id<=>tableA.id
Удаляем просто:
Код: plaintext
1.
2.
3.
4.
5.
** удаляем записи из связанной таблицы
delete from tableB where tableB.id=tableA.id
** затем удаляем запись из основной таблицы
delete from tableA where tableA.id=...
** или просто текущую запись из текущей таблицы
* delete
Естественно, команду удаления связанных записей в этом случае вполне можно повести на триггер удаления записи из основной таблицы.

Вариант: у вас установлено некое текущее отношение через SET RELATION TO + SET SKIP TO, и вы хотите удалить именно связанные записи. Обычно, связанная таблица имеет индекс по выражению связи, и этот индекс активен. Пусть у нас установлено только одно отношение (для простоты примера). Тогда можно сделать так:
Код: plaintext
1.
2.
3.
4.
5.
MyValue=Evaluate(Relation( 1 ))
select tableB
MyKey=Key(Val(SYS( 21 )))
delete all for Evaluate(MyKey)==MyValue
select tableA
delete
...
Рейтинг: 0 / 0
03.12.2010, 14:24
    #36993488
Makrosa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
AndreTMВариант: у вас нормализованные таблицы, тогда имеется что-то вроде tableB.id<=>tableA.id

да у меня такие таблицы. но такой вариант удаления не устраивает (так и я могу). я бы хотел чтоб, когда я удаляю запись (или записи) из таблицы А - таблица А самостоятельно, без моего участия, удаляла запись из В (например с помощью триггера встроенного в таблицу А)
...
Рейтинг: 0 / 0
03.12.2010, 14:45
    #36993573
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
удаление записей
> Автор: Makrosa
> я бы хотел чтоб, ... самостоятельно, без моего участия, ...

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


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
03.12.2010, 15:25
    #36993717
удаление записей
MakrosaAndreTMВариант: у вас нормализованные таблицы, тогда имеется что-то вроде tableB.id<=>tableA.id

да у меня такие таблицы. но такой вариант удаления не устраивает (так и я могу). я бы хотел чтоб, когда я удаляю запись (или записи) из таблицы А - таблица А самостоятельно, без моего участия, удаляла запись из В (например с помощью триггера встроенного в таблицу А)Ну так засовывайте Ваши таблицы в базу данных и пишите соответствующий триггер. В нем то как раз и будут показанные Вам команды.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / удаление записей / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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