2014-09-24 2 views
0

В моей программе Java, я хочу, чтобы достичь такого куска SQL, когда это удаление таблицы А с кодом, используя для условия, и delete Table B(linkId=deleted ids of Table A)Как реализовать удаление Intermediate таблицы

Таблицы A:

=============================================== 
id   |  code  | names  | 
=============================================== 
1   |   A  | name1  | 
2   |   A  | name2  | 
3   |   A  | name3  | 
4   |   B  | name4  | 
5   |   B  | name5  | 
6   |   B  | name6  | 
7   |   B  | name7  | 
8   |   C  | name8  | 

Таблица B (средний таблица):

================================ 
id   |  linkId  |... 
================================ 
1   |   1  |... 
2   |   2  |... 
3   |   2  |... 
4   |   2  |... 
5   |   3  |... 
6   |   7  |... 
7   |   8  |... 
8   |   8  |... 

как это:

delete from A where code = A 
delete from B where linkId =(1,2,3) 

Как использовать заявление sql для достижения?

+0

Если у вас есть БД, вы можете добавить внешний ключ с 'на удаления каскада' вариант –

ответ

1

Если вы не можете добавить ограничение FOREIGN KEY с опцией ON DELETE CASCADE, то просто измените порядок удаления.

-- Delete from TableB (Remove all related records from the child table) 
DELETE FROM 
    TableB 
WHERE 
EXISTS (SELECT 1 FROM TableA WHERE TableB.LinkId = TableA.id AND TableA.code = 'A'); 

-- Delete from TableA (Remove the record from the parent table) 
DELETE FROM TableA WHERE code = 'A'; 

Рассмотрим делать все действия, связанные с этим несколькими столами deletinon в транзакции, чтобы предотвратить потерю данных, когда один из операторов не удается.

Transactions in MySQL

Transactions in Microsoft SQL Server (MSSQL)

Transactions in PostgreSQL

+0

спасибо, @ a_horse_with_no_name @Pred – Vito

0

Если не может быть строки в B с идентификаторами не существующими в вы можете написать

delete from B where not exists (select 1 from A where A.id=B.linkId); 

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

+0

StephaneM, также спасибо ~ – Vito

Смежные вопросы