|
|
|
Вопрос про 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 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevно на delete срабатывает FK.SET NULL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:13 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev , on delete set null ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:13 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
понятно, что можно FK сделать ON DELETE SET NULL Но потребность выглядит уж больно стандартной. Может я чего не доглядел и можно чисто SQL изобразить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:14 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevМожет я чего не доглядел и можно чисто SQL изобразить? Использовать отложенную проверку ограничений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:18 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
DDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям Написать PL/SQL цикл - не проблема просто подумал, может есть какие-то хитрые команды типа MERGE ))), а я темный о них не знаю Удалить из нескольких таблиц сразу вроде можно, а вот удалить и зачистить - не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 14:29 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНо потребность выглядит уж больно стандартной.Ага. Для SET NULL. Leonid KudryavtsevМожет я чего не доглядел и можно чисто SQL изобразить?Предпочитающие идти своим путём могут попробовать трюк навроде: Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 15:11 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevDDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям А set constraint deferred ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 15:17 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
n0rd1c.c0ldLeonid KudryavtsevDDL менять для выполнения простой операции в скрипте - как-то из пушки по воробьям А set constraint deferred ? Глупость написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 15:33 |
|
||
|
Вопрос про 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 |
|
||
|
Вопрос про 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 |
|
||
|
Вопрос про 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 |
|
||
|
Вопрос про delete и fk
|
|||
|---|---|---|---|
|
#18+
да не зачем, просто copy-past не глядя ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2018, 19:23 |
|
||
|
Вопрос про 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 |
|
||
|
Вопрос про 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 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39607865&tid=1884361]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
24ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 327ms |

| 0 / 0 |
