0
votes

Supprimer la requête avec la requête de sélection ne fonctionne pas comme prévu

J'ai 2 tables, I_786 (100k enregistrements) et B_786 (700k enregistrements). La table I_786, tous les enregistrements doivent être supprimés de la table B_786. Ici, la table I est dérivée de la table B en prenant les 100 premiers enregistrements de celle-ci en utilisant rownum. Après cela, je dois supprimer les mêmes enregistrements qui sont dans la table I. J'ai créé la requête comme ci-dessous,

DELETE FROM B_786 
WHERE  EXISTS (SELECT * 
               FROM   I_786); 

Mais il supprime toutes les données de la table B_786. Ici, la condition où ne fonctionne pas. Comment optimiser la clause where ici?


0 commentaires

3 Réponses :


1
votes

Vous devez utiliser une colonne sur laquelle vous souhaitez supprimer l'enregistrement de la table B_786, comme s'il y a 2 colonnes dans la table B_786 (nom d'id) et ayant 700k enregistrements, et il y a 100k enregistrements I_786 avec des colonnes (id, nom). Donc, pour supprimer les données de la table B_786 qui correspondent à l'enregistrement avec la table I_786.

Supprimer de B_786 où identifiant dans (sélectionnez l'identifiant dans I_786);

En exécutant la commande ci-dessus, les données seront supprimées de B_786 qui correspond à l'id de I_786.


0 commentaires

1
votes
DELETE FROM B_786 
WHERE  EXISTS (SELECT 1 FROM   I_786 where I_786.id = B_786.id); 

0 commentaires

1
votes

Dans votre cas, vous devez utiliser une clé de référence, un champ dans une table qui fait référence à la CLÉ PRIMAIRE dans une autre table.

En supposant que pid comme clé référencée dans la table I_786 et fid comme clé référencée dans B_786 p>

Votre requête ressemblera à ceci:

DELETE FROM B_786 WHERE B_786.fid IN (SELECT I_786.pid FROM I_786) as temp;


0 commentaires