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

Requêtes PostgreSQL Discussion :

[requête] DELETE + SELECT


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut [requête] DELETE + SELECT
    Un petite question concernant une de mes requetes. Voilà le problème, lorsque que l'on veut faire un insert en postgresql on peut employer une syntaxe du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO table1_toto SELECT * FROM table2_toto;
    Est-ce que vous savez si il existe une syntaxe equivalente pour les DELETE du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE FROM table1_toto SELECT * FROM table2_toto;
    Merci

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Je ne pense pas que cela soit possible et je n'en vois pas vraiment l'intéret !
    En effet, si tu veux faire cela, c que les tables sont identiques ou qu'elles ont au moins une relation sur un champ.

    Donc pourquoi ne pas faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE FROM table1_toto WHERE table1_toto.un_champ IN (SELECT table2_toto.un_champ from table2_toto);

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    en fait j'ai deux tables de structure identique.
    Dans l'une se trouve les enregistrements à effacer dans l'autre.
    Mais je ne veux effacer un enregistrement que si TOUS les champs de l'enregistrement sont strictement identiques dans les deux bases (environs une centaine de champs).
    Je trouvais que cette solution etait exactement ce que j'avais besoin.
    Avec ta solution il faudrais que je fasse un IN sur la centaine de champs et je me demande si cela ne risque pas de prendre un temps très long (la base table1_toto contient 500 000 enregistrements et la base table2_toto 10 000).
    Si tu penses qu'il y a une solution convenant peut etre mieux a mon problème avec ces renseignements supplémentaires...sinon je vais essayer ta solution avec les IN pour voir le temps d'exection.

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Je comprends mieux ton problème et c clair que ca risque d'etre lourd avec les 100 champs !

    Mais j'ai du mal à comprendre pourquoi tu n'utilise pas de clés uniques pour tes tables, tu n'aurais à faire la jointure que sur un seul champ.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    oui bonne remarque et reponse très simple c'est que l'on vient de me donner à travailler sur une base de données sans clé unique [hourra!!!] donc pour moi le seul moyen pour identifier les enregistrements à effacer est de comparer tous les champs qui ne doivent pas changer et de les supprimer si tous les champs sont identiques...bref un gros casse-tete.

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Dans ce cas, la solution du IN est la seule qui me semble valable et je ne pense pas que ca prendra énormément de temps. Je crois que la clause IN est interprétée comme une succession de OR.

    Donc ceci devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    delete from table1 where (champ_un, champ_deux, champ_trois ...) in (select * from table2);
    Il y a peut etre un moyen d'optimiser la saisie des champs dans la première parenthèse,
    sinon, bon courage

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 32
    Points : 32
    Points
    32
    Par défaut
    merci pour tout je vais regarder tout ca.

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

Discussions similaires

  1. Requête DELETE avec un select imbriqué
    Par unix27 dans le forum PL/SQL
    Réponses: 6
    Dernier message: 01/11/2012, 11h22
  2. Delete + selection avec jointure
    Par kluh dans le forum Oracle
    Réponses: 4
    Dernier message: 15/11/2005, 10h44
  3. Ouvrire requête de selection en VBA ..
    Par snoopy69 dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 15h55
  4. requête avec SELECT imbriqués...
    Par dj_lil dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/07/2005, 11h21
  5. [requête] DELETE + SELECT
    Par doohan dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 07/07/2003, 12h27

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