Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Удаление записей из связанных таблиц  [new]
laifik
Member

Откуда:
Сообщений: 190
Я задавала вопрос по вставке в две связанные таблицы.
[url=http://]https://www.sql.ru/forum/actualthread.aspx?tid=227471[/url]
Теперь задача обратная. Пока я переловачиваю форум по поиску, может кто объяснит, в чем моя ошибка.
Запрос составляю так:
1)
delete tp1
FROM Loading_Card_7777 tp1 left join
Loading_Break_7777 tc2 ON tp1.CardID = tc2.CardID
Where old_id in (4) 

2)
DELETE
  tp1
FROM 
  Loading_Card_7777 tp1
  INNER JOIN (SELECT CardID FROM Loading_Break_7777) tc2 
  ON tp1.CardID = tc2.CardID
Where tp1.old_id in (4) 

Что в принципе одно и то же.
Каскадное удаление в данном случае применить нельзя, т.к. в БД связь не установлена. (Она мне не нужна).
Результат этих запросов одинаков: удаляеся строка в таблице Loading_Card_7777 , где old_id = 4. Связанные по ключу CardID строки в таблице Loading_Break_7777 не удаляются.
Что еще нужно добавить в запрос?
26 окт 05, 11:44    [2006930]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Команда delete удаляет записи только из одной таблицы.
26 окт 05, 11:47    [2006950]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Timon
Member

Откуда: Dushanbe TJK
Сообщений: 2688
Длеать в транзакции два запроса на удаление.
26 окт 05, 11:49    [2006961]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104760
Связанные по ключу CardID строки в таблице Loading_Break_7777 не удаляются.
команда delete может удалять записи только из ОДНОЙ таблицы. Которая указана сразу после DELETE.
Все, что указано во FROM есть всего лишь условия для фильтраци того, какие записи должны быть удалены.
Поэтому придется присать столько команд DELETE, в скольки таблицах вы хотите удалять данные.
И начинать придется с дочерних таблиц.
26 окт 05, 11:50    [2006980]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

Гавриленко Сергей Алексеевич
Команда delete удаляет записи только из одной таблицы.

Это тоже надо добавить в "легенды сервера" :-))

2 laifik:

Триггер на Loading_Card_7777 на удаление повесить надо...


Posted via ActualForum NNTP Server 1.3

26 окт 05, 11:51    [2006988]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
_Maxx_
Member

Откуда: Санкт-Петербург
Сообщений: 23
Roman S. Golubin

Гавриленко Сергей Алексеевич
Команда delete удаляет записи только из одной таблицы.

Это тоже надо добавить в "легенды сервера" :-))

То есть, если нет триггеров, то можно удлить с помощью delete из несколько таблиц?
26 окт 05, 12:30    [2007271]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

_Maxx_
То есть, если нет триггеров, то можно удлить с помощью delete из несколько таблиц?

То есть без знания структуры конкретной базы (наличие триггеров, каскадного удаления) утверждение "Команда delete удаляет записи
только из одной таблицы." - голословно.


Posted via ActualForum NNTP Server 1.3

26 окт 05, 12:34    [2007306]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Roman S. Golubin

_Maxx_
То есть, если нет триггеров, то можно удлить с помощью delete из несколько таблиц?

То есть без знания структуры конкретной базы (наличие триггеров, каскадного удаления) утверждение "Команда delete удаляет записи
только из одной таблицы." - голословно.


Posted via ActualForum NNTP Server 1.3

Команда delete удаляет данные из одной таблицы. Некоторые другие данные _могут_ удаляться, но удаляеются другими механизмами, такими, как другая команда delete в триггере и механизмом каскадного удаления по связям.
26 окт 05, 12:39    [2007345]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roman S. Golubin

_Maxx_
То есть, если нет триггеров, то можно удлить с помощью delete из несколько таблиц?

То есть без знания структуры конкретной базы (наличие триггеров, каскадного удаления) утверждение "Команда delete удаляет записи
только из одной таблицы." - голословно.

Команда delete удаляет из одной таблицы. Но может запускать _другие механизмы_, которые в том числе могут удалять и данные из других таблиц. Или вообще "блокируют" удаление и из этой таблицы - instead of триггер.
По-моему разница между "удаляет" и "запускает" существенна.
26 окт 05, 12:43    [2007365]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
laifik
Member

Откуда:
Сообщений: 190
Я поняла, что это невозможно. Но если удалять из двух таблиц, как узнать CardID первой таблицы, чтобы при удалении второй вывести Where?
26 окт 05, 12:59    [2007476]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
_Maxx_
Member

Откуда: Санкт-Петербург
Сообщений: 23
Glory
Команда delete удаляет из одной таблицы. Но может запускать _другие механизмы_, которые в том числе могут удалять и данные из других таблиц. Или вообще "блокируют" удаление и из этой таблицы - instead of триггер.
По-моему разница между "удаляет" и "запускает" существенна.

Разница безусловно есть, и я ее понимаю. Только какие _другие механизмы_ есть помимо триггеров?
26 окт 05, 13:00    [2007483]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
laifik
Member

Откуда:
Сообщений: 190
Еще раз хочу заметить, что в данной базе нет ни связей, ни триггеров. С БД я работаю через Си Билдер, стараюсь обойтись его средствами при прописывании связей.
26 окт 05, 13:03    [2007498]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104760
_Maxx_
Glory
Команда delete удаляет из одной таблицы. Но может запускать _другие механизмы_, которые в том числе могут удалять и данные из других таблиц. Или вообще "блокируют" удаление и из этой таблицы - instead of триггер.
По-моему разница между "удаляет" и "запускает" существенна.

Разница безусловно есть, и я ее понимаю. Только какие _другие механизмы_ есть помимо триггеров?

Каскадные операции
26 окт 05, 13:08    [2007528]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

Гавриленко Сергей Алексеевич
Команда delete удаляет данные из одной таблицы. Некоторые другие данные _могут_ удаляться, но
удаляеются другими механизмами, такими, как другая команда delete в триггере и механизмом каскадного удаления по связям.

Может и пример из BOL приведете? :-))

PS: В "легенды" я предложил добавить Ваше высказывание, так как знаю нескольких начинающих разработчиков, которые так считали пока
не убедились в обратном ;-)))


Posted via ActualForum NNTP Server 1.3

26 окт 05, 13:09    [2007535]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104760
Roman S. Golubin

Гавриленко Сергей Алексеевич
Команда delete удаляет данные из одной таблицы. Некоторые другие данные _могут_ удаляться, но
удаляеются другими механизмами, такими, как другая команда delete в триггере и механизмом каскадного удаления по связям.

Может и пример из BOL приведете? :-))


BOL - DELETE
Removes rows from a table. :)
26 окт 05, 13:11    [2007555]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

Glory
BOL - DELETE
Removes rows from a table. :)

Вот и я говорю - неполнота описания порождает легенды :-))


Posted via ActualForum NNTP Server 1.3

26 окт 05, 13:27    [2007647]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
laifik
Member

Откуда:
Сообщений: 190
Glory
Каскадные операции

А как я их применю, если таблицы в схеме не связаны?
26 окт 05, 13:37    [2007729]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541

laifik
А как я их применю, если таблицы в схеме не связаны?

А ни как. Так как если таблицы не связаны, то, согласно схеме, они не имеют друг к другу ни какого отношения...


Posted via ActualForum NNTP Server 1.3

26 окт 05, 13:39    [2007751]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
laifik
Glory
Каскадные операции

А как я их применю, если таблицы в схеме не связаны?

Определяйтесь, где живет ваша логика - в DRI, в триггерах или вообще на бизнес-уровне ("С БД я работаю через Си Билдер, стараюсь обойтись его средствами при прописывании связей.")

Раз сервер не имеет никакой информации о связях между таблицами, то как, по-вашему, он сможет выполнять каскадное удаление? На основании телепатического с вами общения?

P.S. Полуофф - имхо, каскадные удаления - это вобще порочная пратика.
26 окт 05, 15:03    [2008263]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
laifik
Member

Откуда:
Сообщений: 190
Понятно.
У меня возникла такая мысль. А что если во вторую связанную таблицу ввести абстрактное поле old_id, как в главной old_id.
Тогда как и в главной, можно копировать значение CardID. А дальше с ним работать на удаление.
26 окт 05, 15:05    [2008273]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
laifik
Member

Откуда:
Сообщений: 190
Да, это правильное решение. У меня все получилось.
Спасибо всем, кто помогал.
26 окт 05, 15:22    [2008397]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
laifik
Понятно.
У меня возникла такая мысль. А что если во вторую связанную таблицу ввести абстрактное поле old_id, как в главной old_id.
Тогда как и в главной, можно копировать значение CardID. А дальше с ним работать на удаление.


laifik
Да, это правильное решение. У меня все получилось.
Спасибо всем, кто помогал.


Мне нифига не понятно, что дает такой подход, тем более, что поле old_id лучше всего удалить сразу же, как только будет закончена перекачка данных. Оно же временное, только для задач перекачки. Поэтому что вы сумели навернуть с его использованием, для меня осталось загадкой. Но раз
laifik
У меня все получилось.

... то что ж. Удачи.
26 окт 05, 15:41    [2008518]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
ChA
Member

Откуда: Москва
Сообщений: 11126
GreenSunrise
P.S. Полуофф - имхо, каскадные удаления - это вобще порочная пратика.
В случае связей master-detail, а не справочник-документ, вполне приемлимо, хотя тоже могут быть нюансы. Разумеется, тоже IMHO :)
26 окт 05, 17:00    [2009050]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
laifik
Member

Откуда:
Сообщений: 190
GreenSunrise

Мне нифига не понятно, что дает такой подход, тем более, что поле old_id лучше всего удалить сразу же, как только будет закончена перекачка данных. Оно же временное, только для задач перекачки. Поэтому что вы сумели навернуть с его использованием, для меня осталось загадкой. Но раз
... то что ж. Удачи.

Если таблицу создавать в процессе работы, то поле old_id можно удалить, когда оно становится не нужным. Но здесь сначала создана БД, а затем уже под нее написана программа. И поля, которые имеются в таблицах, они навсегда. В данном случае, оно не мешает. И нужно только для перекачки данных.
27 окт 05, 15:16    [2012901]     Ответить | Цитировать Сообщить модератору
 Re: Удаление записей из связанных таблиц  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Да я ничего против не имею. Я только говорю, что мне непонятно, как это поле можно использовать при каскадном удалении и зачем его вообще в этом случае использовать?
27 окт 05, 15:35    [2013003]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить