IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

DELETE à partir d'un select


Sujet :

PostgreSQL

  1. #1
    Membre régulier Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 84
    Points
    84
    Par défaut DELETE à partir d'un select
    Bonjour,

    J'ai 2 tables qui représentent des rues. L'une correspond au temps n (table1) et l'autre au temps n+1 (table2). Je veux supprimer de la table2 toutes les rues qui sont déjà dans la table1.
    J'ai commencé par ajouter aux 2 tables une colonne (checksum) qui concatène toutes les autres.

    Je voudrais exécuter une requête telle que
    DELETE table2.* FROM table1, table2 WHERE table1.checksum=table2.checksum;
    Mais il me dit "syntax error" car je ne peux faire que DELETE FROM ....

    Je pense du coup à écrire une fonction qui me mettrait dans une table les checksum qui apparaissent dans les 2 tables
    CREATE TABLE checksumArray(checksum text);
    SELECT table2.checksum INTO checksumArray FROM table1, table2 WHERE table1.checksum=table2.checksum;
    et faire une sorte de boucle :
    for(i=0;i<checksumArray.size;i++)
    DELETE FROM table2 WHERE checksum = checksumArray[i];

    Celà est-il possible ?
    Merci d'avance de votre aide !

    WwAvE

  2. #2
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Salut,

    Deux possibilités selon moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM table2
      WHERE checksum IN (SELECT t1.checksum FROM table1 t1);
    Cette syntaxe est standard il me semble.

    Sinon, il y a aussi possibilité de faire une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM table2 t2 USING table1 t1
      WHERE t2.checksum = t1.checksum;

  3. #3
    Membre régulier Avatar de wwave
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 84
    Points
    84
    Par défaut
    Je connaissais pas le USING... parce que j'avais aussi essayer avec le select mais j'ai des tables qui sont ENORMES et du coup le processus était beaucoup trop long....
    Merci !!!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    à quoi sert le USING ?

  5. #5
    Membre éprouvé
    Avatar de Biglo
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2002
    Messages : 537
    Points : 984
    Points
    984
    Par défaut
    Dans ce cas, à faire une jointure pour déterminer les enregistrements à supprimer.

    Voir l'exemple et l'explication en fin de cette page : http://www.postgresql.org/docs/8.1/i...ql-delete.html

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 21
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par Biglo
    Dans ce cas, à faire une jointure pour déterminer les enregistrements à supprimer.

    Voir l'exemple et l'explication en fin de cette page : http://www.postgresql.org/docs/8.1/i...ql-delete.html
    C'est plus efficace que :
    DELETE FROM table2 t2, table1 t1
    WHERE t2.checksum = t1.checksum;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [oracle 9i]update à partir d'une selection complexe
    Par Requin15 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/06/2006, 10h18
  2. Générer des input à partir d'un select
    Par Rekiem dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 10/05/2006, 15h51
  3. [PHP-JS] Extraction de données à partir d'un select
    Par Le Rebel dans le forum Langage
    Réponses: 3
    Dernier message: 30/01/2006, 10h11
  4. UPDATE globale à partir d'un SELECT
    Par lilianen dans le forum Oracle
    Réponses: 2
    Dernier message: 28/11/2005, 15h55
  5. "Create table..." à partir d'un "select"
    Par TraPpeur dans le forum Access
    Réponses: 3
    Dernier message: 21/11/2005, 12h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo