J'ai 2 tables, un tablier parent et une petite table g.. TABLEB a 1 ou plusieurs enregistrements avec un enregistrement parent en tablea. J'ai besoin de supprimer tous les enregistrements de tableb, sauf la date la plus ancienne à savoir, tous les doublons de la tableb. Je ne pense pas que le tableau doit être impliqué dans la déclaration, mais j'y comprends juste pour référence. Donc, dans la tablebe ci-dessus, j'ai besoin de supprimer des enregistrements 17, 20 et 21 en laissant un enregistrement pour chaque secide. Jusqu'à présent, j'ai ci-dessous, mais pour une raison quelconque, il comprend le dossier le plus ancien que je veux garder: p>
3 Réponses :
Vous pouvez utiliser Rowid and Analytics:
SQL> DELETE FROM tableB b_out 2 WHERE EXISTS (SELECT NULL 3 FROM tableB b_in 4 WHERE b_in.secID = b_out.secID 5 AND b_in.paydate < b_out.paydate); 3 rows deleted
Salut Vincent Merci pour la réponse. J'ai essayé la demi-jointure et on dirait que cela devrait fonctionner, mais il garde le dernier enregistrement au lieu des plus anciens.
@Ciaran: Tu as raison, je n'avais pas vérifié le résultat. J'ai mis à jour ma réponse, cela devrait fonctionner maintenant.
C'est celui qui accueille. Une idée pourquoi ma requête originale ne fonctionne pas?
@Ciaran: Vous auriez besoin de spécifier quelle Secide à supprimer, peut-être quelque chose comme Suppr de tableb où (Secide, Paydate) non dans (Sélectionnez Secide, Min (Paydate) du groupe TABLEB par Secide) Code>
bien repéré que et votre requête ci-dessus renvoie les mêmes résultats..cheers
table pour supprimer tous les enregistrements en double sauf un p> Pour supprimer des enregistrements de dupliqués spécifiques, sauf un P>
Supprimer du tableau A Où Rowid <(Sélectionnez max (Rowid) du tableau B où A.Id = b.Id) code> p> P>
blockQuote>
Supprimer du tableau A Où Rowid <(Sélectionnez max (Rowid) du tableau B où A.Id = B.Id et A.Id = 122) Code> P>
blockQuote> p>
delete from your_table a where a.rowid not in ( select max(b.rowid) from your_table b group by b.col1,b.col2....b.coln ) This will get all unique rowids and except these rowid-s the sql will delete all rows.