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 dans une table sans id


Sujet :

PostgreSQL

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut Delete dans une table sans id
    Bonjour à tous,

    J'ai une table qui a cette forme :
    id_table_a
    id_table_b
    sequence

    Et je voudrais supprimer les doublons id_table_a <=> id_table_b qui se suivent, par exemple
    1, 10, 0
    1, 20, 1
    1, 20, 2
    1, 15, 3

    Il faudrait supprimer la 2ème ou la 3ème ligne.

    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    DELETE FROM ma_table,
    (
        SELECT
           *
        FROM
            ma_table t1
            ma_table t2
        WHERE
            t1.id_table_a = t2.id_table_a AND
            t1.id_table_b = t2.id_table_b AND
            t2.sequence = t1.sequence + 1
    ) sub
    WHERE
        id_table_a = sub.id_table_a AND
        id_table_b = sub.id_table_b AND
        sequence = sub.sequence
    Mais ça m'indique une erreur sur la "(" de début de requête interne.

    Vous pouvez m'aider s'il vous plaît ?

    Merci par avance

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Pour être plus précis :

    J'ai des lignes formées par une succession de points. La table donc je parle est celle qui associe les points aux lignes :

    L1 P1 1
    L1 P2 2
    L1 P3 3
    L2 P4 1
    L2 P5 2
    L2 P6 3

    Et parfois, j'ai deux fois le même points à la suite :
    L1 P1 1
    L1 P2 2
    L1 P2 3
    L1 P3 4

    Il me faudrait retirer une référence L1 - P2 et il faut traiter que les cas où les deux points se suivent.

    Le traitement va être effectué une seule fois à l'installation des données dans la base. Donc si c'est pas très propre et/ou performant à la rigueur c'est pas grave, mais avant de faire ça je préfère vous demander si y'a pas mieux quand même.

    Ce que je peux faire c'est ajouter une colonne d'entier, parcourir les enregistrement pour y attribuer un identifiant, et ensuite je pourrai effectuer un delete avec une clause IN( SELECT...

    Qu'est-ce que vous en pensez ?

    Merci beaucoup,

    A bientôt

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    A première vue dans ta requête il suffirait de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE FROM ma_table,
    (
        SELECT ...
    Par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM ma_table USING (
        SELECT ...
    le reste restant à l' identique.

    En effet la syntaxe de DELETE est:
    test=> \h delete
    Command: DELETE
    Description: delete rows of a table
    Syntax:
    DELETE FROM [ ONLY ] table [ [ AS ] alias ]
    [ USING usinglist ]
    [ WHERE condition | WHERE CURRENT OF cursor_name ]
    [ RETURNING * | output_expression [ AS output_name ] [, ...] ]

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Impeccable, merci beaucoup

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

Discussions similaires

  1. Ajout dans une table sans doublon
    Par Cbonniot dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/05/2009, 10h31
  2. Réponses: 1
    Dernier message: 30/04/2009, 10h16
  3. delete dans une table contenant des primary key
    Par bracket dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/11/2008, 17h41
  4. PB Lock sur delete dans une table
    Par greatmaster1971 dans le forum DB2
    Réponses: 10
    Dernier message: 06/07/2008, 20h49
  5. Delete dans une table de jointure
    Par Jexou dans le forum Hibernate
    Réponses: 7
    Dernier message: 12/06/2008, 14h11

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