OVH Cloud OVH Cloud

Requête suppression

5 réponses
Avatar
TITI
Bonjour,

Je voudrais par une requête suppression, supprimer les enregistrements d'une
table dont la valeur d'un champ n'est pas dans une autre table.
Je m'explique :

J'ai une Table1 qui contient une clé (Code_Clé) et un champ Num_Com, une
deuxiéme Table2 qui contient une clé (Code_Clè, Code_Reg) et un champ
Num_Insee.

Ces deux tables sont reliées par une relation de la Table1 à la Table2 sur
Code_Clé.
Je voudrais par une requête de suppression, enlever dans la Table1, les
enregsitrements qui ne sont pas saisis pour la valeur de Code_Clé dans la
Table2.
En fait vous allez me répondre que si j'avais positionné l'intégrité
référentielle je n'aurais pas ce problème car je n'aurais pas pu créer
d'enregistrement dans la Table2, qui n'ai pas de valeur de Code_Clé
correspondant dans la Table1. (En fait ce sont des données que j'ai récupéré
et je dois faire le ménage).

J'ai donc essayé de faire une requête de suppression avec les deux tables,
j'ai modifié la jointure pour que tous les enregistrements s'affichent et
j'ai mis une condition pour dire de ne supprimer que les enregistrements de
la Table1 pour lequels dans la Table2 je n'avais pas de valeur pour
Code_Clé.

Mais quand je demande à exécuter ma requête, il apparaît le message
"Spécifier la table contenant les enregistrements à supprimer". Je ne sais
pas quoi faire.

Pourriez vous m'aider ?


Merci.


Thierry

5 réponses

Avatar
Xavier HUE
Bonjour TITI,

Il te faut passer par une requête ave cjointure externe
gauche:

DELETE Table1.*, Table2.Code_Clé
FROM Table1 LEFT JOIN Table2 ON Table1.Code_Clé =
Table2.Code_Clé
WHERE (((Table2.Code_Clé) Is Null));


Cordialement.
Avatar
TITI
Merci pour le conseil, mais quand je fais (à priori ce que tu me dis) j'ai
le message suivant "Impossible de supprimer dans les tables spécifiées".
Voici ma requête si je récupère le code SQL:

DELETE Regroupement_categorie.*, Regroupement_Commune.Cat_regroup
FROM Regroupement_categorie LEFT JOIN Regroupement_Commune ON
(Regroupement_categorie.Code_Regroupement Regroupement_Commune.Code_Regroupement) AND
(Regroupement_categorie.Cat_Regroup = Regroupement_Commune.Cat_regroup)
WHERE (((Regroupement_Commune.Cat_regroup) Is Null));


Merci de ton aide.

Thierry
"Xavier HUE" a écrit dans le message de
news:1118701c3f542$d61dcdf0$
Bonjour TITI,

Il te faut passer par une requête ave cjointure externe
gauche:

DELETE Table1.*, Table2.Code_Clé
FROM Table1 LEFT JOIN Table2 ON Table1.Code_Clé Table2.Code_Clé
WHERE (((Table2.Code_Clé) Is Null));


Cordialement.
Avatar
michel
Bonjour
Tu fais une requete suppression sur table2
Tous les champs (*)
Tu ajoutes le champ Code_clé pour lequel tu met comme critère :
Not In (Select code_clé from table1)
Et HOP ca supprime
HTH
Michel
"TITI" a écrit dans le message de news:

Bonjour,

Je voudrais par une requête suppression, supprimer les enregistrements
d'une

table dont la valeur d'un champ n'est pas dans une autre table.
Je m'explique :

J'ai une Table1 qui contient une clé (Code_Clé) et un champ Num_Com, une
deuxiéme Table2 qui contient une clé (Code_Clè, Code_Reg) et un champ
Num_Insee.

Ces deux tables sont reliées par une relation de la Table1 à la Table2 sur
Code_Clé.
Je voudrais par une requête de suppression, enlever dans la Table1, les
enregsitrements qui ne sont pas saisis pour la valeur de Code_Clé dans la
Table2.
En fait vous allez me répondre que si j'avais positionné l'intégrité
référentielle je n'aurais pas ce problème car je n'aurais pas pu créer
d'enregistrement dans la Table2, qui n'ai pas de valeur de Code_Clé
correspondant dans la Table1. (En fait ce sont des données que j'ai
récupéré

et je dois faire le ménage).

J'ai donc essayé de faire une requête de suppression avec les deux tables,
j'ai modifié la jointure pour que tous les enregistrements s'affichent et
j'ai mis une condition pour dire de ne supprimer que les enregistrements
de

la Table1 pour lequels dans la Table2 je n'avais pas de valeur pour
Code_Clé.

Mais quand je demande à exécuter ma requête, il apparaît le message
"Spécifier la table contenant les enregistrements à supprimer". Je ne sais
pas quoi faire.

Pourriez vous m'aider ?


Merci.


Thierry




Avatar
Xavier HUE
On en apprend tous les jours ;-)

Je viens de tester ta requête après avoir créer 2 tables
vite fait.
Si les champs de jointures dans la table
Regroupement_Commune ne font pas partie de la clé
primaire, le message d'erreur sort effectivement. Une
subtilité de SQL.

2 solutions:
- Déclarer les zones de jointure comme clé dans
Regroupement_Commune
ou
- Faire une requête création de table qui sélectionne
les Regroupement_Categorie effectivement utilisés. Une
fois la table créée, vider la table d'origine, puis, y
copier les enregistrements ajoutés dans la table créée
précédemment.

SELECT Regroupement_categorie.*,
Regroupement_Commune.Code_Regroupement INTO
Regroupement_categorie_utilise
FROM Regroupement_categorie LEFT JOIN Regroupement_Commune
ON (Regroupement_categorie.Code_Regroupement =
Regroupement_Commune.Code_Regroupement) AND
(Regroupement_categorie.Cat_Regroup =
Regroupement_Commune.Cat_Regroup)
WHERE (((Regroupement_Commune.Code_Regroupement) Is Not
Null));

Ok?
Cordialement.
Avatar
TITI
Merci pour votre aide, j'y suis arrivé.

Thierry
"TITI" a écrit dans le message de
news:
Bonjour,

Je voudrais par une requête suppression, supprimer les enregistrements
d'une

table dont la valeur d'un champ n'est pas dans une autre table.
Je m'explique :

J'ai une Table1 qui contient une clé (Code_Clé) et un champ Num_Com, une
deuxiéme Table2 qui contient une clé (Code_Clè, Code_Reg) et un champ
Num_Insee.

Ces deux tables sont reliées par une relation de la Table1 à la Table2 sur
Code_Clé.
Je voudrais par une requête de suppression, enlever dans la Table1, les
enregsitrements qui ne sont pas saisis pour la valeur de Code_Clé dans la
Table2.
En fait vous allez me répondre que si j'avais positionné l'intégrité
référentielle je n'aurais pas ce problème car je n'aurais pas pu créer
d'enregistrement dans la Table2, qui n'ai pas de valeur de Code_Clé
correspondant dans la Table1. (En fait ce sont des données que j'ai
récupéré

et je dois faire le ménage).

J'ai donc essayé de faire une requête de suppression avec les deux tables,
j'ai modifié la jointure pour que tous les enregistrements s'affichent et
j'ai mis une condition pour dire de ne supprimer que les enregistrements
de

la Table1 pour lequels dans la Table2 je n'avais pas de valeur pour
Code_Clé.

Mais quand je demande à exécuter ma requête, il apparaît le message
"Spécifier la table contenant les enregistrements à supprimer". Je ne sais
pas quoi faire.

Pourriez vous m'aider ?


Merci.


Thierry