Как удалить строки из таблиц, на которые ссылаются друг друга? - PullRequest
1 голос
/ 09 марта 2010

Я хочу сделать это:

delete from table1 a,table2 b, table3  c 
 where a.col1 = b.col1 
   and b.col2 = c.col2 
   and a.co3 <> 8001;

Но это дает мне ошибку.

Ответы [ 4 ]

3 голосов
/ 09 марта 2010

сначала удалите самый низкий уровень и оттуда поднимайтесь, по одному на уровень, до самого высокого уровня:

DELETE FROM ChildTable WHERE ParentID=...

DELECT FROM ParentTable WHERE ParentID=...
2 голосов
/ 09 марта 2010

Вы можете включить каскадное удаление, а затем удалить родительскую запись.

1 голос
/ 09 марта 2010

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

Delete TableC
Where Exists( Select 1 From TableA Where TableA.Col1 = TableC.Col2 And TableA.Col3 <> '8001' )

Delete TableB
Where Exists( Select 1 From TableA Where TableA.Col1 = TableB.Col2 And TableA.Col3 <> '8001' )

Delete TableA
Where Col3 <> '8001'
0 голосов
/ 09 марта 2010

удалить А из таблицы 1 а, таблицы 2 б, таблицы 3 с
где a.col1 = b.col1
и b.col2 = c.col2
и a.co3 <> 8001;

...