Forum général.général SQL : Requête d'update.

Posté par  .
Étiquettes : aucune
0
11
août
2005
SQL : requête d'update.
Je suis en phase de codage d'une requête de suppression de doublon.

Je dispose d'une table FLUX :


FLU :
FLU_ID | PADT | CONTRAT | TYPE_FLU
1 A B C
2 A B C

5 M N O
10 M N O
11 M N O

80 X Y Z
85 M N O


et une d'une d'acheminement


ACH :
ACH_FLU_ID | DATA
1 | INFO_1
2 | INFO_2
5 | INFO_3
10 | INFO_4


Je souhaite mettre a jour ACH pr avoir :


ACH_FLU_ID | DATA
1 | INFO_1
1 | INFO_2
5 | INFO_3
5 | INFO_4


en les faisant pointer sur les FLU_ID de valeur minimale (car les autres lignes FLU_ID seront supprimées car il s'agit de doublon)
Explication : la clé de ACH est en fait la colonne DATA (je simplifie pr l'exemple) et la clé de FLU est en fait le triplet (PADT, CONTRAT, TYPE_FLU), les lignes 1 et 2 doivent pointer sur FLU_ID=1, pour que la base soit sous forme normale, et car FLU_ID=2 sera supprimé.

Je voudrais "juste" avoir la requête de mise a jour de ACH, depuis 2 jours je tourne en rond, et je ne vois pas comment m'en dépêtré...
J'ai déjà posté cette question, mais pas eu de réponse satisfaisante.
Merci pour votre aide.
  • # pfiou

    Posté par  . Évalué à 1.

    Certainement faisable, mais chiant ;o)

    T'aurais pas un script qui crée les tables
    et les remplit avec ton exemple ? Parce qu'
    écrire l'ordre comme ca dans le vide c'est
    trop dur pour moi...

    question subsidiaire : c'est quoi comme SGBD ?
    • [^] # Re: pfiou

      Posté par  . Évalué à 2.

      le sgbd est Oracle
      Dès que j'ai 5 mn je reviendrais poster les scripts.
      • [^] # Re: pfiou

        Posté par  . Évalué à 2.

        Passaient pas mes requetes ?..
        • [^] # Re: pfiou

          Posté par  . Évalué à 2.

          snt ---> non pas tout à fait.
          J'ai pu résoudre mon 1er pb, mais j'en ai d'autres maintenant.

          Comment je peux faire pour virer les doublons d'une table qui a cette tête.

          MY_TABLE :

          MY_TABLE_ID [ COL1 | COL2 | COL3
          1 | A | B | C
          2 | A | B | C
          3 | A | B | C
          4 | A | B | C

          Pour ne garder que la 1ere ligne :

          MY_TABLE_ID | COL1 | COL2 | COL3
          1 | A | B | C

          La ligne à garder étant celle du MY_TABLE_ID minimum
          Une idée ?
          • [^] # Re: pfiou

            Posté par  . Évalué à 2.

            delete from my_table
            where (col1,col2,col3) in
            ( select col1,col2,col3 from my_table group by col1,col2,col3 having count(*)>1 )
            and id not in ( select min(id) from my_table group by col1,col2,col3 having count(*)>1 )

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.