par
Augure » 07 juil. 2005, 14:40
Ouupsssss .... je corrige mon exemple.
Code : Tout sélectionner
create table T2 (id int , a char(20));
insert T2 values (1,'papa');
insert T2 values (2,'maman');
insert T2 values (3,'frere');
insert T2 values (4,'soeur');
create table T1 (id int);
insert T1 values (2);
insert T1 values (3);
select * from T2;
+------+-------+
| id | a |
+------+-------+
| 1 | papa |
| 2 | maman |
| 3 | frere |
| 4 | soeur |
+------+-------+
-- SUPPRESSION
delete T2 from T1 , T2 where T1.id = T2.id;
select * from T2;
+------+-------+
| id | a |
+------+-------+
| 1 | papa |
| 4 | soeur |
+------+-------+
Par contre note que si aprés avoir ré initialiser la table T2, si tu lances
Alors toutes les lignes de T2 sont supprimées. En effet, pour chaque ligne de T2 il existe une ligne de T1 qui à id différent.
Pour visualiser les lignes que tu supprimes lance cette ordre :
Pour finir de répondre à ton probléme ; Pour supprimer toutes les lignes de T2 qui ne sont référencé dans T1.
Code : Tout sélectionner
delete
from T2
where not exists (select 1 from T1 where T1.id = T2.id);
select * from T2;
+------+-------+
| id | a |
+------+-------+
| 2 | maman |
| 3 | frere |
+------+-------+
Ouupsssss .... je corrige mon exemple.
[code]create table T2 (id int , a char(20));
insert T2 values (1,'papa');
insert T2 values (2,'maman');
insert T2 values (3,'frere');
insert T2 values (4,'soeur');
create table T1 (id int);
insert T1 values (2);
insert T1 values (3);
select * from T2;
+------+-------+
| id | a |
+------+-------+
| 1 | papa |
| 2 | maman |
| 3 | frere |
| 4 | soeur |
+------+-------+
-- SUPPRESSION
delete T2 from T1 , T2 where T1.id = T2.id;
select * from T2;
+------+-------+
| id | a |
+------+-------+
| 1 | papa |
| 4 | soeur |
+------+-------+
[/code]
Par contre note que si aprés avoir ré initialiser la table T2, si tu lances
[code]delete T2 from T1 , T2 where T1.id <> T2.id;[/code]
Alors toutes les lignes de T2 sont supprimées. En effet, pour chaque ligne de T2 il existe une ligne de T1 qui à id différent.
Pour visualiser les lignes que tu supprimes lance cette ordre :
[code]select T2.* from T1 , T2 where T1.id <> T2.id;[/code]
Pour finir de répondre à ton probléme ; Pour supprimer toutes les lignes de T2 qui ne sont référencé dans T1.
[code]delete
from T2
where not exists (select 1 from T1 where T1.id = T2.id);
select * from T2;
+------+-------+
| id | a |
+------+-------+
| 2 | maman |
| 3 | frere |
+------+-------+[/code]