|
|
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Есть таблица A с полем A.id Есть таблица B с полями id, header_id, a_id Есть FK B.a_id => A.id Нужно удалить записи из A запросом вида delete from A where A.id in (select a_id from b where header_id=1); update B set a_id=null where header_id=1; но на delete срабатывает FK. Можно ли такую тривиальную задачу решить SQL без временных таблиц и PL/SQL ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:05:38 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevно на delete срабатывает FK.SET NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:13:03 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev , on delete set null ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:13:39 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
понятно, что можно FK сделать ON DELETE SET NULL Но потребность выглядит уж больно стандартной. Может я чего не доглядел и можно чисто SQL изобразить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:14:37 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevМожет я чего не доглядел и можно чисто SQL изобразить? Использовать отложенную проверку ограничений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:18:47 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
DDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям Написать PL/SQL цикл - не проблема просто подумал, может есть какие-то хитрые команды типа MERGE ))), а я темный о них не знаю Удалить из нескольких таблиц сразу вроде можно, а вот удалить и зачистить - не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:29:11 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНо потребность выглядит уж больно стандартной.Ага. Для SET NULL. Leonid KudryavtsevМожет я чего не доглядел и можно чисто SQL изобразить?Предпочитающие идти своим путём могут попробовать трюк навроде: Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 15:11:32 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevDDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям А set constraint deferred ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 15:17:55 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
n0rd1c.c0ldLeonid KudryavtsevDDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям А set constraint deferred ? Глупость написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 15:33:16 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
n0rd1c.c0ldLeonid KudryavtsevDDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям А set constraint deferred ? ORA-02447 cannot defer a constraint that is not deferrable ))) всюду грабли. Сделал на PL/SQL. Но спасибо за информацию. Ни про ON DELETE SET NULL, ни про SET DEFERRED не знал Код: plsql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 15:34:24 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev... запросом вида delete from A where A.id in (select a_id from b where header_id=1); update B set a_id=null where header_id=1;Выглядит некорректным, в после update в B могут остаться ссылки на A. В предположении допущений по поводу критериев нужности записей A: Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 16:01:23 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
-2-, не могу понять зачем IN? update B set a_id=null where a_id in (select a_id from B where header_id=1); ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 18:47:48 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
да не зачем, просто copy-past не глядя ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 19:23:27 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Staxне могу понять зачем IN? update B set a_id=null where a_id in (select a_id from B where header_id=1); сравни in (... header_id = 1) и непосредственный header_id = 1id a_id header_id101 10 0101 10 1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 21:36:17 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
всего две строкиStaxне могу понять зачем IN? update B set a_id=null where a_id in (select a_id from B where header_id=1); сравни in (... header_id = 1) и непосредственный header_id = 1id a_id header_id101 10 0101 10 1 ясно, чет проморгал (ступил) етот момент хотя, судя по первому посту, еще вопрос нужно ли ето Leonid-у Kudryavtsev-у .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2018, 10:12:56 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39607877&tid=1884361]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 363ms |

| 0 / 0 |
